2011-08-15 60 views
9

基本上,我想一個HTML助手(類似@Html.MyEditor(m => m.Property))產生這樣的:如何在自定義Html Helper中使用Html.EditorFor()(和其他)?

<div class="editor-label"> 
    @html.LabelFor(m => m.Property) 
</div> 
<div class="editor-field"> 
    @html.EditorFor(m => m.Property) 
    @html.ValidationMessageFor(m => m.Property) 
</div> 

唯一的問題是,我似乎無法訪問Html.EditorFor()或任何在身旁我自己的助手的其他擴展方法。實施例嘗試:

@helper Edit(this System.Web.Mvc.HtmlHelper<Spartacus.ViewModels.NewTaskItemModel> html) 
{ 
    <div class="editor-label"> 
     @html.LabelFor(m => m.Property) 
    </div> 
    <div class="editor-field"> 
     @html.EditorFor(m => m.Property) 
     @html.ValidationMessageFor(m => m.Property) 
    </div> 
} 

我還試圖擴展方法的語法:

public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression) 
{ 
    var sb = new StringBuilder(); 
    sb.AppendLine("<div class=\"editor-label\">"); 
    sb.AppendLine(html.LabelFor(expression)); 
    sb.AppendLine("</div>"); 
    sb.AppendLine("<div class=\"editor-field\">"); 
    sb.AppendLine(html.EditorFor(expression)); 
    sb.AppendLine(html.ValidationMessageFor(expression)); 
    sb.AppendLine("</div>"); 
    return sb.ToString(); 
} 
在上述兩者的嘗試

,所述LabelFor,EditorFor和ValidationMessageFor拋出編譯錯誤( 「找不到」)。

任何人都知道的一種方式做到這一點?提前致謝!

+3

也許我沒有得到這個問題背後的伎倆,但在第二種情況下(由於這是純C#,對吧?)恕我直言,如果你有使用System.Web.Mvc.Html命名空間的命名空間它應該工作。擴展方法在各種靜態擴展類(例如EditorExtensions)上的此名稱空間中定義。 –

+1

@Tz_ 就是這樣!我有'System.Web.Mvc',但不是'System.Web.Mvc.Html'。奇怪的是,VS2010沒有告訴我那是我需要的命名空間 - 它通常會選擇它,併爲我使用聲明自動更正,所以我認爲還有其他錯誤。 如果你想添加一個答案而不是評論,我會給你正確答案的功勞。 – jrizzo

回答

7

,如果你有使用的System.Web.Mvc.Html命名空間的命名空間它應該工作。擴展方法在各種靜態擴展類(例如EditorExtensions)上的此名稱空間中定義。

相關問題