我有以下课程:
public class ViewModel
{
public List<Dog> Dogs { get; set; }
}
public class Dog
{
public int Id { get; set; }
public string Name { get; set; }
public string Type { get; set; }
public string SuperPowers { get; set; }
}
假设我有以下视图:
@model ViewModel
@for(int i = 0; i < Model.Dogs.Count(); i++)
{
<div class="dog">
@Html.HiddenFor(m => m.Dogs[i].Id)
<div>Dog name: @Model.Dogs[i].Name</div>
<div>Dog type: @Model.Dogs[i].Type</div>
<div>Dog super powers : @Model.Dogs[i].SuperPowers</div>
</div>
}
问题:如何指定string "d"
用于Dog
类,以便 html 输出如下所示:
<div class="dog">
<input type="hidden" id="d_0__Id" name="d[0].Id" value="1" />
<div>Dog name: Boby</div>
<div>Dog type: Turbo</div>
<div>Dog super powers : Extra speed</div>
</div>
<div class="dog">
<input type="hidden" id="d_1__Id" name="d[1].Id" value="2" />
<div>Dog name: Lasy</div>
<div>Dog type: Powered</div>
<div>Dog super powers : Extra strength</div>
</div>
注意输入有名字d[1].Id
代替Dogs[1].Id
我知道我以后可以编写一个自定义模型绑定器来处理这样的 html 输出,但如果我不必这样做,那就太好了。
重要的
我正在寻找一种可以让我继续使用@Html.HiddenFor(...)
而不是@Html.Hidden(...)
因为我讨厌魔术弦的解决方案。如果它不包括编写自定义模型绑定器然后将新的 html 标记解释为模型,我会更欢迎一个解决方案。
在完美的情况下,这将是某种属性,我会打给我的班级。例子:[BindClassNameTo(Name="d")]