在迭代的EditTemplate中进行动态控制

时间:2013-10-10 15:59:49

标签: jquery asp.net-mvc asp.net-mvc-4 razor mvc-editor-templates

我正在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...

1 个答案:

答案 0 :(得分:0)

结束处理服务器端以保持繁重的工作。第一次通过EditTemplate自动生成ID。每当我需要从列表中添加/删除时,我都会在AJAX调用中将序列化表单传递给服务器。然后服务器更改请求并传回列表的呈现HTML,可以使用jquery在客户端交换进出。

本来可以使用客户端绑定来解决这个问题,但是服务器上的C#更可测试并且目前编译安全。不幸的是,成本是往返服务器并返回更新列表。