使用MVC 4,我正在寻找一种结合淘汰模板和EditorFor的简单方法。我几乎有我正在寻找的东西:
<div data-bind="template: { name:'cover', foreach: StockItems }"></div>
<script type="text/html" id="cover">
@Html.EditorFor(m => m.StockItems[0].Name, "MyTemplate",
new { htmlAttributes = new
{ data_bind = "value: $data.Name")
在编辑器模板中,我可以绑定淘汰模板中的值:
@model KnockOut.Models.StockItem
@Html.TextBoxFor(model => model.Name, ViewData["htmlAttributes"])
这非常有效,几乎是一个很好的简单解决方案,可以满足我的需求。我有一些非常简单的JavaScript来控制添加,删除和发布JSON回到服务器。
我不喜欢的是我在这里硬编码0:m.StockItems [0] .Name,它导致name和id属性生成为:
id="StockItems_0__Name" name="StockItems[0].Name"
我拥有的每件商品。我可以使用attr
:对于id,name和其他任何内容,并使用$index()
重新命名相应的内容:
@Html.EditorFor(m => m.StockItems[0].Name, "MyTemplate",
new { htmlAttributes =new { data_bind =
"value: $data.Name,
attr:id:='StockIten_'+$index()+'.Name'")
我想可能我需要一个更复杂的EditorFor并使用C#@foreach()而不是Knockout foreach和模板,而我要提出的问题是不可能的。
但是,无论如何我能以某种方式从Knockout模板到EditorFor获取索引吗?
当然,我也非常有兴趣看到解决整个问题的更好方法。
由于