2013-08-02 30 views
0

在MVC4中,使用Razor視圖引擎,我們有一組我們希望在局部視圖中分組的項目,以便我們可以重用代碼。目前,我們的主要觀點,我們有沿着線的東西:如何在部分視圖中引用模型的屬性?

<div class="editor-label"> 
    @Html.LabelFor(model => model.Description) 
</div> 
<div class="editor-field"> 
    @Html.TextAreaFor(model => model.Description, new { @id = "Common" }) 
    <div class="FormValidationText"> 
    @Html.ValidationMessageFor(model => model.Description) 
    </div> 
</div> 

我們希望能夠利用這個邏輯,但與各種各樣的車型,但並不是所有這些將要使用的model.Description。

例如,我們想使用模型Foo,併爲Foo.Bar屬性創建以上,但我們也希望能夠使用Hello模型的Hello.World屬性。這些都是字符串類型,就像你期望的那樣,因爲我們想處理來自textarea的文本輸入。

我們需要在部分視圖中進行哪些編輯以說「使用任何給定模型的某些指定屬性,並將其理解爲該模型的屬性,以生成這些項目」。隨後,我們如何使用@{Html.RenderPartial(...)}方法來確保我們已通過模型屬性?

請原諒我,如果這看起來有點困惑,我仍然在學習MVC和Razor的觀點。

回答

2

這些都是字符串類型,因爲我們希望 處理textarea的文本輸入。

你可以寫一個編輯器模板:~/Views/Shared/EditorTemplates/MyTemplate.cshtml

@model string 
<div class="editor-label"> 
    @Html.LabelFor(model => model) 
</div> 
<div class="editor-field"> 
    @Html.TextAreaFor(model => model, new { @id = "Common" }) 
    <div class="FormValidationText"> 
     @Html.ValidationMessageFor(model => model) 
    </div> 
</div> 

,然後你的意見,你可以使用這樣的:

@model Foo 
... 
@Html.EditorFor(x => x.Description, "MyTemplate") 

或:

@model Hello 
... 
@Html.EditorFor(x => x.World, "MyTemplate") 

,如果你命名你的模板~/Views/Shared/EditorTemplates/string.cshtml你甚至都不需要指定其名稱調用EditorFor助手時:

@model Hello 
... 
@Html.EditorFor(x => x.World) 

按照慣例string類型的所有屬性將使用模板。

+0

非常感謝您的明確示例。這實現了我所需要的。 – Deleted

相關問題