我正在ASP.NET MVC4中编写一个Razor视图。
我有一个我将要显示的对象列表。我目前正在使用@ Html.EditorFor(),并为数据模型列表定义了EditTemplate。
首先,我想使用jquery在编辑模板中有条件地显示/隐藏控件,但是我不确定脚本应该在哪里(在编辑模板中可能?)以及如何只选择相关控件编辑模板的当前迭代。
接下来我想有一个添加按钮,可以生成控件的新实例(可能通过AJAX?)并将其添加到客户端的列表中。
以前有人做过这样的事吗?有没有办法在模板中获取迭代计数,以便我可以将它放在控件的类或其他东西?我需要能够在jquery中选择它们,以便我可以切换控制状态。
代码看起来像这样:
在主视图中:
@Html.EditorFor(vm => vm.ListOfChildViewModels)
<button type="button" class="btn" id="btnAddViewModel">Add view model</button>
EditorTemplate:
@MyNamespace.Web.ViewModels.VMType
@Html.DropDownListFor(vm => vm.SelectorProperty, Model.SelectorOptions)
// This checkbox should only get displayed if the dropdown has selectedIndex == 0
@Html.CheckBoxFor(vm => vm.Option1)
// This checkbox should only get displayed if the dropdown has selectedIndex == 1
@Html.CheckBoxFor(vm => vm.Option2)
// Etc...
答案 0 :(得分:0)
结束处理服务器端以保持繁重的工作。第一次通过EditTemplate自动生成ID。每当我需要从列表中添加/删除时,我都会在AJAX调用中将序列化表单传递给服务器。然后服务器更改请求并传回列表的呈现HTML,可以使用jquery在客户端交换进出。
本来可以使用客户端绑定来解决这个问题,但是服务器上的C#更可测试并且目前编译安全。不幸的是,成本是往返服务器并返回更新列表。