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