我正在学习本教程。有人能向我解释一下我如何将文本框绑定回词典吗?现在所发生的只是数据被显示在文本框中,但如果我更改了文本框,我该如何绑定回对象?。我错过了什么?以下是我的代码:
<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"/>
文本输入字段的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>
}
在本例中,字典的键是一个简单的字符串值,但也可以使用复杂的类型。