1

私は次のクラスを持っています:

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>
}

質問: html 出力が次のようになるように、クラスに使用string "d"するように指定するにはどうすればよいですか?Dog

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

4

1 に答える 1

2

使用できますHtml.Hidden(string.format("d[{0}]", i), Model.Dogs[i])

于 2012-08-03T21:20:41.193 に答える