这是我的模特:
public class Attribute
{
public string Key { get; set; }
public string Value{ get; set; }
}
我在我的GET创建中填写
public ActionResult Create()
{
var Attributes = new[]
{
new Attribute {Key = "Name" Value = "" },
new Attribute {Key = "Age" Value = "" },
};
return View(Attributes);
}
我的观点如下:
@model IEnumerable<Customers.ViewModels.Attribute>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
@foreach (var item in Model)
{
<div class="editor-label">
@Html.Label(item.Key)
</div>
<div class="editor-field">
@Html.EditorFor(m => item.Value)
@Html.ValidationMessageFor(m => item.Value)
</div>
}
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
然后我的帖子创建看起来像这样:
[HttpPost]
public ActionResult Create(IEnumerable<Attribute> attributes)
{
}
但我的IEnumerable<Attribute> attributes
为空。有什么建议吗?
答案 0 :(得分:3)
您需要为Attribute
创建一个编辑器模板,然后将List<Attribute>
模型传递给它。
@Model Attribute
<div class="editor-label">
@Html.LabelFor(m => m.Key)
</div>
<div class="editor-field">
@Html.EditorFor(m => m.Value)
@Html.ValidationMessageFor(m => item.Value)
</div>
在您的视图中使用:
<fieldset>
@Html.EditorFor(m > m)
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
您需要这样做,因为foreach
没有为元素创建正确的名称。