mvc 上的部分视图创建使用下拉列表填充部分视图的视图包的视图这在 mvc 中可能吗?

Partial Views on mvc create view that use a dropdown list to populate the partial view's view bag is this possible in mvc?

mvc 上的部分视图是否可以创建使用下拉列表的视图,该下拉列表将下拉列表中的值发送到根据下拉列表值选择创建列表的函数,然后将其存储在视图包中以供使用部分视图.. 这可以在 mvc 中完成吗?可以在创建 mvc 表单的视图时完成吗?

我可以看到这在编辑视图中是如何工作的,因为在页面加载时已经选择了下拉列表值。

但是在新的创建视图记录上没有选择任何东西,所以列表函数有一个空值

部分视图是否仅适用于其中预填充了数据的表单?

更新:

我有一个由 visual studio 向导创建的创建视图。它既有post又能得到下创。当用户在创建视图时。我在页面表单上有一个带有其他字段的下拉列表,但在加载新创建页面时它是空的。对我来说不幸的是,我希望我的部分视图能够填充一个数据列表,在用户从下拉列表中进行选择后,这些数据将被发送到视图包。

我认为我要求做的事情只能用 webforms 来完成,因为 mvc 似乎可以很好地处理动态数据。因为当页面加载时,下拉列表没有值。无法构建列表,因此如果我在下拉列表中硬编码一个值,则会出现空值错误和空列表。

这是我在这些不同尝试线程中的代码,不同版本的代码记录了我的许多尝试。正如我所总结的那样,遗憾的是这是不可能的。

不,分部视图不一定必须是强类型的,如果这是您的问题。您可以只使用 html 标记获得局部视图。

因此,在 Matt Bodily 的帮助下,您可以使用视图包和名为 Ajax 的东西在下拉列表中的更改值触发的创建视图中填充局部视图。以下是我如何使我的代码工作。

首先是您需要检查空数据的部分视图代码示例

_WidgetListPartial

 @if (@ViewBag.AList != null)
    {
    <table cellpadding="1" border="1">
    <tr>
        <th>
            Widget Name 
        </th>
     </tr>

@foreach (MvcProgramX.Models.LIST_FULL item in @ViewBag.AList)
   {
    <tr>
        <td>
            @item.WidgetName
        </td>        
    </tr>
   }

   </table>
  }

使用函数在控制器中填充 View Bag

    private List<DB_LIST_FULL> Get_List(int? VID)
    {

        return db.DB_LIST_FULL.Where(i => i.A_ID == VID).ToList();
    }

在您的创建控制器中使用 [HttpGet] 元素添加这样的结构 这会将您的数据和您的部分视图发送到您在创建屏幕上的屏幕占位符 VID 将是您下拉列表中的 ID 此功能还将部分视图发送回创建表单屏幕

    [HttpGet]
    public ActionResult UpdatePartialViewList(int? VID)
    {           

        ViewBag.AList = Get_List(VID);
        return PartialView("_WidgetListPartial",ViewBag.AList);


    }

如果需要,我不是 100%,但我将以下内容添加到 ActionResult 创建表单 ID 和 FormCollection,以便我可以从下拉列表中读取值。同样,Ajax 的东西可能会小心,但以防万一,应用程序似乎正在使用它。

这是在 [HttpPost]

   public ActionResult Create(int RES_VID, FormCollection Collection, [Bind(Include = "... other form fields

这又在 [HttpGet] 中,可能也不需要。这是从表单中读取一个值

 UpdatePartialViewList(int.Parse(Collection["RES_VID"]));

在您希望显示局部视图的创建视图屏幕上

        <div class="col-sm-6">

            <div class="form-horizontal" style="display:none" id="PV_WidgetList">

                @{ Html.RenderAction("UpdatePartialViewList");}



            </div>
        </div>

最后是 Ajax 代码,它从下拉列表中读取点击。获取所选项目的值并将值传递回后面的所有控制器代码以构建列表并将其发送以更新部分视图,如果那里有数据,它将带有更新列表的部分视图传递给创建表单.

    $(document).ready(function () {
        $('#RES_VID').change(function ()
        {

            debugger;

            $.ajax(

                {
                    url: '@Url.Action("UpdatePartialViewList")',
                    type: 'GET',
                    data: { VID: $('#RES_VID').val() },

                    success: function (partialView)
                    {
                        $('#PV_WidgetList').html(partialView);
                        $('#PV_WidgetList').show();
                    }
                });

这很多不是最好的方法,但这是一个完整的经过测试的答案,因为它有效,并且它是过程的每一步,希望没有其他人必须经历 multi-day 恐怖显示我必须经历才能获得最初基于错误的东西,我认为这不能在 mvc 中完成,我将不得不在 webforms 中继续该应用程序。再次感谢帮助我制定此解决方案的所有人!