【发布时间】:2012-03-20 07:41:44
【问题描述】:
我想知道一些形式和部分形式的变体。提交在父页面上,我改变了传递给部分视图的内容。我有一个带有相关 HomeViewModel 的父视图(它具有公共属性 Name 和 public Person Employee {get;set;}
1.) 场景 1:主视图如下所示
@model MasterDetailSample.Models.HomeViewModel
@using (Html.BeginForm()) {
<div>
@{Html.RenderPartial("_PersonView", @Model);}
</div>
<input type="submit" value="Save" />
}
在这种情况下,我将整个 HomeViewModel 传递给局部视图 _PersonView。在 _PersonView 局部视图中,我必须通过 @model.Employee.Name 引用 HomeViewModel 的属性,即 Person 对象(在这种情况下,提交是在父表单上(不在局部视图内))
当我在控制器中的表单 (POST) 上点击提交时,我必须通过以下 model.Employee.Name 访问员工“姓名”的属性
这似乎可行,但请注意以下变体场景 2(我只传递给部分 Employee 对象)
2.) 场景 2 在这种情况下,我只想将 Employee 对象发送到局部视图。再次开始表单和提交是在父表单上。
所以从父表单我有
@{Html.RenderPartial("_MasterView", @Model.Employee);}
所以在局部视图中,我通过@Employee.Name 引用了 Person 对象的 Name 属性现在,当我在控制器中提交表单时,Employee 对象在自动模型绑定器中不可用。我可以通过 formcollection 访问属性,但不能通过模型参数访问属性
即
[HttpPost]
public ActionResult Index(ModelViewModel model) {
**//model.Employee is null!**
return View();
}
为什么? (是 model.Employee null) 我希望我的部分视图只接受 Person 类型的对象,但是在从父页面提交后,Employee 属性为 null。在部分视图中,我在@model 行上使用以下内容
@model MasterDetailSample.Models.Person
我希望部分只需要一个 Person 对象发送给它,但我希望在主表单上提交。如果我这样做,我可以在少数情况下重新使用局部视图,但是如果我必须发送 HomeViewModel,我会大大限制我如何使用这个局部视图。因此,再次重申,我只想使用 Person 作为部分视图的模型,但我需要能够在从父视图提交时访问属性。
这可以吗?如果是怎么办?
谢谢
【问题讨论】:
标签: asp.net-mvc-3