告诉视图使用另一个字符串作为模型中的特定属性

时间:2012-08-03 20:41:30

标签: asp.net-mvc model-binding

我有以下课程:

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")]

1 个答案:

答案 0 :(得分:2)

您可以使用Html.Hidden(string.format("d[{0}]", i), Model.Dogs[i])