2014-09-22 84 views
1

給定一個看起來像這樣的模板嗎?在asp.net中級聯編輯器模板的最佳方法mvc

<div class="form-group"> 
     <label class="control-label col-md-6">@Html.LabelFor(_ => _.A)</label> 
     <div class="col-md-6"> 
      @Html.EditorFor(_ => _.A) 
      @Html.ValidationMessageFor(_ => _.A, null, new { @class = "help-block" }) 
     </div> 
    </div> 
    <div class="form-group"> 
     <label class="control-label col-md-6">@Html.LabelFor(_ => _.B)</label> 
     <div class="col-md-6"> 
      @Html.EditorFor(_ => _.B) 
      @Html.ValidationMessageFor(_ => _.B, null, new { @class = "help-block" }) 
     </div> 
    </div> 
    (and repeat for every field) 

如何正確地對此進行參數設置。編輯器模板似乎不能級聯。

換句話說,我認爲需要的是將lambda作爲模型參數的模板?

TemplateFor(x => x.Other)其中模板包含所有樣板標記,並在正確的位置調用EditorForLabelForValidationMessageFor

EditorFor需要根據屬性的類型選擇正確的模板,就像通常那樣。

+0

怎麼樣'@ Html.EditorForModel()'或'@ Html.EditorFor(x => x)'你有試過嗎? – py3r3str 2014-09-22 15:46:05

回答

0

你可以把這一切都放在你的編輯器模板中。例如,您可以爲String創建編輯模板:

查看\共享\ EditorTemplates \ String.cshtml

<div class="form-group"> 
    <label class="control-label col-md-6">@Html.Label("")</label> 
    <div class="col-md-6"> 
     @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue) 
     @Html.ValidationMessage("", null, new { @class = "help-block" }) 
    </div> 
</div> 

,然後,對於任何string財產,你只需要在你的下面觀點:

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

通知,有關編輯模板兩件事情:

  1. 沒有*For方法,而只是常規的HTML幫助程序。這可以讓您避開需要進行初始表達的問題。
  2. 但是,常規方法要求您將屬性名稱指定爲字符串,但謝天謝地,Razor會爲您提供一個輸出:如果您傳遞一個空字符串,它會爲您輸入正確的字符串。

沖洗並重復所有其他類型。有關更深入的概述,請參閱我的文章Display Templates and Editor Templates for Fun and Profit

相關問題