我有以下模型
public class ProductLang
{
public int productID { get; set; }
public int langID { get; set; }
[Required, StringLength(150)]
public string name { get; set; }
[AllowHtml]
public string description { get; set; }
}
控制器
public ActionResult Edit(int id)
{
return View(_db.Products.FirstOrDefault(p => p.id.Equals(id)).ProductLangs);
}
查看
@model IEnumerable<ProductLang>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
@Html.Hidden("id", Model.FirstOrDefault().productID)
@foreach (var productLang in Model) {
<div>
@Html.Hidden("prodLang.Index", productLang.idLingua)
@Html.Hidden("prodLang[" + productLang.langID + "].productID", productLang.productID)
@Html.Hidden("prodLang[" + productLang.langID + "].langID", productLang.langID)
<div class="editor-label">
@Html.Label("prodLang" + productLang.langID + "__nome", "Name")
</div>
<div class="editor-field">
@Html.TextBox("prodLang[" + productLang.langID + "].name", productLang.name)
@Html.ValidationMessage("prodLang[" + productLang.langID + "].name")
</div>
<div class="editor-label">
@Html.Label("prodLang" + productLang.langID + "__description", "Description")
</div>
<div class="editor-field">
@Html.TextArea("prodLang[" + productLang.langID + "].description", productLang.description)
</div>
</div>
}
<input type="submit" value="EDIT" />
}
我有其他视图和控制器,其中jquery unobstrusive验证工作,但不是在这里。我假设因为我有一个List。 事实上,如果我只用一个对象创建一个视图,那就可以了。
如何将jquery unobstrusive验证绑定到列表?
答案 0 :(得分:4)
您可以考虑使用编辑器模板,而不是编写那些丑陋的foreach
循环并尝试在视图中找到合适的输入名称,因为它会使您的视图更加简单:
@model IEnumerable<ProductLang>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
@Html.Hidden("id", Model.FirstOrDefault().productID)
@Html.EditorForModel()
<input type="submit" value="EDIT" />
}
然后在相应的编辑器模板(~/Views/Home/EditorTemplates/ProductLang.cshtml
)内:
@model ProductLang
<div>
@Html.HiddenFor(x => x.idLingua)
@Html.HiddenFor(x => x.productID)
@Html.HiddenFor(x => x.langID)
<div class="editor-label">
@Html.LabelFor(x => x.name, "Name")
</div>
<div class="editor-field">
@Html.TextBoxFor(x => x.name)
@Html.ValidationMessageFor(x => x.name)
</div>
<div class="editor-label">
@Html.LabelFor(x => x.description, "Description")
</div>
<div class="editor-field">
@Html.TextAreaFor(x => x.description)
</div>
</div>
现在你会发现一切都自动神奇地出现了:正确的命名约定,这样当你回发时,默认的模型绑定器将能够重建视图模型,客户端和服务器端验证工作,清理视图,快乐用户: - )