[英]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.