ICollection对象编辑cshtml

时间:2016-01-07 21:21:47

标签: c# asp.net-mvc asp.net-mvc-4 razor

我想在集合对象中创建或编辑。但是收集对象返回null控制器。

视图模型:

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)                          
}

2 个答案:

答案 0 :(得分:1)

在循环中使用@Html.TextBoxFor(m => item.Author.Id)时,对于循环内的所有文本框,它将生成带有name属性的文本框标记

name="item.Author.Id"

提交表单时,Modelbinder无法将此表单数据映射到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            
}

答案 1 :(得分: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
 }
相关问题