我正在用 C# ASP.NET MVC4(Razor 引擎)编程。我需要创建一个局部视图并在多个地方重用它。问题是视图是一个表单,在某些情况下我需要将它与 ViewModel 一起使用。我的问题是模型绑定将如何工作,因为在 ViewModel 中它将是属性的属性。例子:
public class PersonModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class OfficeViewModel
{
public PersonModel Person { get; set; }
// other properties
}
PersonModel 的部分视图将是:
@model SomeNameSpace.PersonModel
@Html.TextBoxFor(m => m.FirstName)
@Html.TextBoxFor(m => m.LastName)
当这个视图被渲染时,它看起来像这样:
<input type="textbox" id="FirstName" name="FirstName" />
<input type="textbox" id="LastName" name="LastName" />
现在我想在我的 OfficeViewModel 中使用相同的视图。在这种情况下,我会在我的 Office 视图中执行此操作:
@{ Html.RenderPartial("Person", Model.Person); }
当这个局部视图被渲染时,它将被渲染如上所示。如果我不重用该视图,我的 Office 视图将如下所示:
@model SomeNameSpace.OfficeViewModel
@Html.TextBoxFor(m => m.Person.FirstName)
@Html.TextBoxFor(m => m.Person.LastName)
这将呈现为:
<input type="textbox" id="Person_FirstName" name="Person.FirstName" />
<input type="textbox" id="Person_LastName" name="Person.LastName" />
请注意name属性如何具有Person前缀属性。因此,如果我使用 RenderPartial 选项并传入 Model.Person,模型绑定器会知道在OfficeViewModel中绑定FirstName和LastName的位置吗?
如果模型绑定器足够聪明,可以检查属性的属性,那么当我在 OfficeViewModel 中有一个ManagerModel和EmployeeModel并且它们都有名为 FirstName 和 LastName 的属性时会发生什么?
我希望我已经清楚了,并提前感谢。