【问题标题】:ICollection object edit cshtmlICollection 对象编辑 cshtml
【发布时间】:2016-01-07 21:21:46
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    name="item.Author.Id"
    

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

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

    由于我们的 ViewModelEditManuscript 类有一个名为 Authors 的集合属性,并且其中的每个项目又有一个 Author 属性,它又具有一个 Id 属性,我们应该告诉 razor 为我们的像

    这样的输入
    name="Authors[0].Author.Id"  
    name="Authors[1].Author.Id"
    

    我们可以使用Html.TextBox 辅助方法来做到这一点。第一个参数是输入的名称属性的值。

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

    【讨论】:

    • 我想要新的作者,但没有在 jquery 中创建新的文本框
    • 对不起!我不明白你在说什么。
    【解决方案2】:
    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
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-20
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      相关资源
      最近更新 更多