繁体   English   中英

ICollection对象编辑CSHTML

[英]ICollection object edit cshtml

我要在集合对象中创建或编辑。 但是集合对象返回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)                          
}

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

name="item.Author.Id"

提交表单后,Modelbinder无法将此表单数据映射到ViewModelEditManuscript类的对象。

为了使模型绑定生效,您需要确保正在生成与视图模型属性层次结构匹配的正确字段名称。

由于我们的ViewModelEditManuscript类具有一个称为Authors的集合属性,并且每个项目又具有Author属性,而该属性又具有Id属性,因此我们应该告诉razor为我们的输入生成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            
}
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
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM