2014-12-01 66 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)