鉴于以下情况:
我有一个包含各种属性的模型,其中一个属性是List。 该模型如下:
public class DocumentTypeViewModel : BaseViewModel<int>
{
#region Properties
public string Name { get; set; }
public List<DocumentTypeProperty> Properties { get; set; }
#endregion Properties
}
DocumentTypeProperty只有一个带有名字的字段(当然还有一个id,但这里并不重要)。
现在,ActionResult显示创建将发生的视图如下:
public ActionResult Create()
{
var model = Mapper.Map<DocumentType, DocumentTypeViewModel>(new DocumentType());
return View(model);
}
因此,如您所见,我将一个空模型发送到视图,因此该集合为null。 现在,在我的Razor视图中,我想要一个添加按钮,我可以使用它来添加元素到集合(我知道我可以使用jQuery创建元素),但我不想发布它自它不需要,该帖子将在模型保存时发生。
所以问题是:
如何将我动态创建的文本框传递给我的ActionResult?
亲切的问候,
答案 0 :(得分:2)
MVC中的模型绑定将绑定到集合
@Html.TextBoxFor(model => model[0].Name)
@Html.TextBoxFor(model => model[1].Name)
那么你的控制器可能是
public ActionResult Create(List<DocumentTypeViewModel> )
然后,您可以在提交表单时立即创建所有行。
如果要将每行保存到数据库中,因为它已添加到表单中,那么您需要执行一些AJAX。
此外,无需在视图中放置DateCreated和DateUpdated。如果你这样做,那么一个精明的用户就可以编辑它们。只需让控制器在保存之前添加它们。
答案 1 :(得分:1)
如果你想在视图中显示IEnumerable /列表,你可以使用forech loop。你可以通过viewbag或modelbinding从你的控制器发送列表。这样的东西
public ActionResult Create()
{
var model = Mapper.Map<DocumentType, DocumentTypeViewModel>(new DocumentType());
Viewbag.List=Userlist// bind your list here
return View(model);
}
只需使用表格和forech循环来表示列表数据
@foreach (var item in @Viewbag.List)
{
//Define your table structure
}
我不清楚你在添加数据的第二步说了些什么。我先说清楚。 感谢