2011-02-14 70 views
4

我有以下模式MVC 3 -

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驗證綁定到列表?

回答

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> 

現在你會發現,一切都自動神奇地來到自己的位置:正確的命名約定,這樣,當你回發的默認模型綁定呃將能夠重建視圖模型,客戶端和服務器端驗證工作,乾淨的視圖,開心的用戶:-)