2

私はこのチュートリアルに従っています。テキストボックスを辞書にバインドする方法を教えてもらえますか?現在、データがテキストボックスに表示されているだけですが、テキストボックスを変更した場合、オブジェクトにバインドするにはどうすればよいですか?私は何が欠けていますか?以下は私のコードです:

 <input type="text" name="@Model.ExpirimentToRemove[i].Value.Title" value="@Model.ExpirimentToRemove[i].Value.Title"/>
 <input type="text" name="@Model.ExpirimentToRemove[i].Value.PreviewDescription" value="@Model.ExpirimentToRemove[i].Value.PreviewDescription"/>
 <input type="text" name="@Model.ExpirimentToRemove[i].Value.FullDescription" value="@Model.ExpirimentToRemove[i].Value.FullDescription"/>
4

1 に答える 1

2

テキスト入力フィールドのnameが間違っています。ハンゼルマンのブログ投稿で説明されているように、モデルに適切な名前を付けるのではなく、モデルの値を入力しました。

それで、あなたがいくつかのビューモデルを持っていると仮定しましょう:

public class ItemViewModel
{
    public string Title { get; set; }
    public string PreviewDescription { get; set; }
    public string FullDescription { get; set; }
}

ディクショナリを含むメインビューモデル:

public class MyViewModel
{
    public Dictionary<string, ItemViewModel> ExpirimentToRemove { get; set; }
}

そして、POSTコントローラーアクションはこのビューモデルをパラメーターとして受け取ります。

[HttpPost]
public ActionResult Remove(MyViewModel model)
{
    ...
}

このビューモデルに正しくバインドするには、次のようにすることができます。

@model MyViewModel
@using (Html.BeginForm())
{
    @for (var i = 0; i < Model.ExpirimentToRemove.Count; i++)
    {
        <div>
            @Html.TextBox(
                "ExpirimentToRemove[" + i + "].Key", 
                Model.ExpirimentToRemove[i].Key
            )
            @Html.TextBox(
                "ExpirimentToRemove[" + i + "].Value.Title", 
                Model.ExpirimentToRemove[i].Value.Title
            )
            @Html.TextBox(
                "ExpirimentToRemove[" + i + "].Value.PreviewDescription", 
                Model.ExpirimentToRemove[i].Value.PreviewDescription
            )
            @Html.TextBox(
                "ExpirimentToRemove[" + i + "].Value.FullDescription", 
                Model.ExpirimentToRemove[i].Value.FullDescription
            )
        </div>
    }

    <p><button type="submit">OK</button></p>
}

この例では、辞書のキーは単純な文字列値ですが、複合型を使用することもできます。

于 2012-09-10T06:43:34.747 に答える