2014-12-01 62 views
0

我有关于MVC Razor中的部分视图的问题。任何帮助都会得到高度赞赏,这很可能是我错过的一些东西,但是当搜索出现同样的问题时,我什么也找不到。MVC Razor Html.Partial子模型

所以我将我的视图绑定到视图模型。

public class Person 
{ 
    public string Name { get; set; } 

    public virtual ContactInformation ContactInformation { get; set; } 
} 

然后我有一个局部视图呈现联系人信息模型。

<div> 
    @Model.Name 
</div> 
<div> 
    @Html.Partial("_ContactInformation", Model.ContactInformation) 
</div> 

然而,“_ContactInformation”视图而不ContactInformation在<input>小号

一般剃刀的name属性呈现结合的名称属性是这样的:名称=“ContactInformation.Address”。但由于它是一个部分,它会呈现为name =“Address”。

我错过了什么,或者这是它的工作方式?

+0

这是按预期工作的。视图是自包含的,他们不知道父视图/模型。如果你想这个工作正常,你需要使用['@ Html.EditorFor(model,template)'](http://msdn.microsoft.com/en-us/library/ee407414(v = vs.118 ).aspx)而不是'@ Html.Partial()'。 – 2014-12-01 18:18:14

+0

我认为最好的MVC有更好的方式,但至少应该有所帮助 - http://thatextramile.be/blog/2011/01/prefixing-input-elements-of-partial-views-with-asp-net- mvc – 2014-12-01 18:19:22

+0

@AlexeiLevenkov如果我要去看局部视图(这是一种奇怪的方式去创建编辑器模板输出...)我宁愿使用一个接口(它创建一个很好的强类型视图),然后创建一个新的编辑器方法,它有一个魔术字符串。 – 2014-12-01 18:23:17

回答

5

你有两个选择。选项1 - 显式指定前缀:

@Html.Partial("_ContactInformation", Model.ContactInformation, new ViewDataDictionary 
{ 
    TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "ContactInformation" } 
}) 

选项2是将局部视图为编辑模板模型,比使用EditorFor的辅助方法,应该能够添加前缀为您提供:

@Html.EditorFor(m => m.ContactInformation)