【问题标题】: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 中是否可能?
【发布时间】:2017-06-18 17:41:41
【问题描述】:

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

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

但是在新的创建视图记录中没有选择任何内容,因此列表函数具有空值

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

更新:

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

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

这是我在这些不同尝试线程中的代码,我的代码的不同版本记录了我的多次尝试。正如我得出的结论,遗憾的是这是不可能的。

Can a Drop Down List Trigger A Partial View To Update on A Create View Form In mvc?

Null view bag and partial view

Populating Partial Views using mvc

Updating a Partial View in MVC 5

【问题讨论】:

  • 这听起来像是您需要使用 ajax 调用加载部分视图。我用谷歌搜索了“mvc 部分视图 ajax”,两个好的结果是 stackoverflow.com/questions/32610270/…stackoverflow.com/questions/10589787/…
  • 我强烈建议您研究 jquery 和 ajax。我提供的链接准确地显示了如何设置它。它们是强大的工具,在使用 MVC 时会让你的生活更轻松。只是我的 2 美分 :)
  • 您可以像 stackoverflow.com/questions/18963618/… 那样更直接地加载下拉列表。如您所描述的那样加载部分,这正是ajax的用途。级联链接将显示如何从下拉事件中触发 ajax 调用
  • 查看前 2 个链接,了解如何在服务器上获取该数据并返回可以显示的部分视图
  • 很高兴您可以随时使用 :)

标签: asp.net-mvc partial-views viewbag


【解决方案1】:

因此,在 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();
    }

在您的 Create 控制器中,使用 [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();
                    }
                });

这不是最好的方法,但这是一个完整的经过测试的答案,因为它有效,它是过程的每一步,希望没有其他人必须经历我不得不经历的多日恐怖秀根据我认为无法在 mvc 中完成的错误,通过获取最初可以工作的东西,我将不得不在 webforms 中继续应用程序。再次感谢帮助我制定此解决方案的所有人!

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我不感谢这就是我要问的......我会去查找强类型的含义。我在我的问题中添加了更多详细信息。我只是想要一个部分视图来处理创建表单,但是来自创建的数据是基于创建视图上的下拉列表选择,该创建视图没有任何价值向数据库中添加新记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多