2016-01-07 38 views
1

我想在集合對象中創建或編輯。但收集對象返回null控制器。ICollection對象編輯cshtml

視圖模型:

public class ViewModelEditManuscript 
{ 
    public int Id { get; set; } 
    public string ArchiveNumber { get; set; } 
    public ICollection<ViewModelEditManuscriptAuthor> Authors { get; set; 

} 

public class ViewModelEditManuscriptAuthor 
{ 
    public ViewModelEditPerson Author { get; set; } 
} 

public class ViewModelEditPerson 
{ 
    public int Id { get; set; } 
    public string TRName { get; set; }   
} 

控制器:

public ActionResult Edit(ViewModelEdit viewModelEdit) 
{ 
    problem this.viewModel.Authors = null; 
} 

CSHTML:

foreach (var item in @Model.Entity.Authors)       
{ 
    @Html.TextBoxFor(m => item.Author.Id)       
} 

回答

1

當您使用@Html.TextBoxFor(m => item.Author.Id)你的循環中,對於循環中的所有文本框,這是要使用名稱屬性生成文本框標記爲

name="item.Author.Id" 

當表單提交的模型綁定器不能在此形式的數據映射到ViewModelEditManuscript類的對象。

對於模型綁定工作,您需要確保您正在生成適合您的視圖模型屬性層次結構匹配的字段名稱。

由於我們ViewModelEditManuscript類有一個名爲Authors集合屬性和每個項目又具有Author財產再有Id財產,我們應該告訴剃刀產生像我們投入name

name="Authors[0].Author.Id" 
name="Authors[1].Author.Id" 

我們可以做Html.TextBox幫手方法來做到這一點。第一個參數是輸入的name屬性的值。

@model ViewModelEditManuscript 
@using (Html.BeginForm()) 
{  
    var i = 0; 
    foreach (var item in @Model.Authors) 
    { 
     @Html.TextBox("Authors[" + i+ "].Author.Id",item.Author.Id) 

     i++; 
    } 
    <input type="submit"/> 
} 

這將工作假設你HttpPost操作方法的參數類型是ViewModelEditManuscript

[HttpPost] 
public ActionResult WhateverYourActionMethodNameIs(ViewModelEditManuscript model) 
{ 
    // do something with model and redirect/return something    
} 
+0

我想要的新作者,但在jQuery的 – Sinan

+0

對不起沒有創造新的文本框!我不懂你在說什麼。 – Shyju

0
I wantto Authors save. 

//this Domain 
public class Manuscript 
{ 
    public int Id { get; set; } 
    public string ArchiveNumber { get; set; } 

    [XmlIgnore] 
    public virtual ICollection<ManuscriptAuthor> Authors { get; set; } 
} 

    public class ManuscriptAuthor 
    { 
     public int ManuscriptId { get; set; } 

     public int AuthorId { get; set; } 
    } 

//this controller 
public ActionResult Edit(ViewModelEdit viewModelEdit) 
{ 
    Manuscript manuscript = null; 
    manuscript.Authors = viewModelEdit.Entity.Authors; // this error 
}