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文本输入字段的 错误。您已经放置了模型的值,而不是按照 Hanselman 的博客文章中的说明正确命名它。

所以让我们假设你有一些视图模型:

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 回答