C# 部分子模型
我对MVC Razor中的部分视图有一个问题。非常感谢您提供的任何帮助,这很可能是我错过的,但我在搜索时找不到有相同问题的内容 因此,我将视图绑定到视图模型C# 部分子模型,c#,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,我对MVC Razor中的部分视图有一个问题。非常感谢您提供的任何帮助,这很可能是我错过的,但我在搜索时找不到有相同问题的内容 因此,我将视图绑定到视图模型 public class Person { public string Name { get; set; } public virtual ContactInformation ContactInformation { get; set; } } 然后我有一个视图,带有一个局部视图来渲染联系人信息模型 <div&g
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>
@型号.名称
@Html.Partial(“\u ContactInformation”,Model.ContactInformation)
但是,在
s的name
属性中呈现的“\u ContactInformation”视图中没有ContactInformation
通常razor会将name属性绑定到以下内容:name=“ContactInformation.Address”。但由于它是一个部分,因此会呈现为name=“Address”
是我遗漏了什么,还是这是它的预期工作方式?您有两个选择。选项1-明确指定前缀:
@Html.Partial("_ContactInformation", Model.ContactInformation, new ViewDataDictionary
{
TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "ContactInformation" }
})
选项2是将局部视图转换为模型的编辑器模板,然后使用EditorFor
helper方法,该方法应该能够为您添加前缀:
@Html.EditorFor(m => m.ContactInformation)
你有两个选择。选项1-明确指定前缀:
@Html.Partial("_ContactInformation", Model.ContactInformation, new ViewDataDictionary
{
TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "ContactInformation" }
})
选项2是将局部视图转换为模型的编辑器模板,然后使用EditorFor
helper方法,该方法应该能够为您添加前缀:
@Html.EditorFor(m => m.ContactInformation)
这是工作的预期。视图是自包含的,它们不知道父视图/模型。如果你想让它正常工作,你需要使用而不是
@Html.Partial()
。我认为最新的MVC有更好的方式,但至少这应该会有帮助-@AlexeiLevenkov如果我要进入部分视图(这对于创建编辑器模板输出的东西来说是一种奇怪的方式),我宁愿使用一个接口(这将创建一个漂亮的stronly类型视图)然后创建一个新的编辑器方法,该方法具有一个神奇的字符串。该方法按预期工作。视图是自包含的,它们不知道父视图/模型。如果要使其正常工作,则需要使用而不是@Html.Partial()
。我认为最新的MVC有更好的方式,但至少这应该会有帮助-@AlexeiLevenkov如果我要进入局部视图(这是一种奇怪的方式,可以创建编辑器模板输出…),我宁愿使用一个接口(创建一个漂亮的stronly类型视图),然后创建一个具有神奇字符串的新编辑器方法。