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表单视图时完成?
我可以看到这在编辑视图中是如何工作的,因为在页面加载时已经选择了下拉列表值。
但是在新的Create视图记录中没有选择任何内容,因此list函数具有null值
部分视图仅适用于预先填充数据的表单吗?
更新:
我有一个由visual studio向导创建的创建视图。它有一个帖子,并在创建下得到。当用户在创建视图时。我在页面表单上有一个包含其他字段的下拉列表,但在加载新的创建页面时它是空的。不幸的是,我希望我的部分视图能够填充一个数据列表,在用户从下拉列表中进行选择后,这些数据会被发送到视图包。
我认为我要做的事情只能通过webforms完成,因为mvc可以很好地处理动态数据。并且因为当页面加载时,下拉列表没有值..如果我在下拉列表中硬编码值,则列表无法构建,因此存在空值错误以及空列表。
这是我的代码在这些不同的尝试线程中,我的代码的不同转换记录了我的许多尝试。正如我所说的那样,悲伤是不可能的。
下拉列表是否可以在mvc中创建视图表单时触发部分视图更新?
零视图袋和局部视图
使用mvc填充部分视图
在MVC 5中更新部分视图
因此,在Matt Bodily的帮助下,您可以使用视图包和名为Ajax的内容在下拉列表中的更改值触发的创建视图中填充部分视图。以下是我使代码工作的方式。
首先,您需要检查空数据的部分视图代码示例
_WidgetListPartial
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | @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
1 2 3 4 5 | 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,此功能还会将部分视图发送回创建表单屏幕
1 2 3 4 5 6 7 8 9 | [HttpGet] public ActionResult UpdatePartialViewList(int? VID) { ViewBag.AList = Get_List(VID); return PartialView("_WidgetListPartial",ViewBag.AList); } |
如果需要,我不是100%但我在ActionResult中添加了以下内容创建表单ID和FormCollection,以便我可以从下拉列表中读取值。同样,Ajax的东西可能会照顾它,但以防万一,应用程序似乎正在使用它。
这是[HttpPost]
1 | public ActionResult Create(int RES_VID, FormCollection Collection, [Bind(Include ="... other form fields |
这也是[HttpGet],这也可能不需要。这是从表单中读取值
1 | UpdatePartialViewList(int.Parse(Collection["RES_VID"])); |
在"创建视图"屏幕上,您希望显示部分视图
1 | @{ Html.RenderAction("UpdatePartialViewList");} |
最后,后面的Ajax代码从下拉列表中读取单击。获取所选项的值并将值传递回所有后面的控制器代码以构建列表并发送它以更新局部视图,如果有数据,则将带有更新列表的局部视图传递给创建表单。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $(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中的应用程序。再次感谢帮助我制定此解决方案的每个人!
不,如果这是你的问题,部分观点不一定必须是强类型的。您可以使用html标记获得部分视图。