2014-04-18 60 views
2

我在剃鬚刀頁面有這段代碼。如何在助手中使用TextBoxFor?

@{ var countryCode = Model.CountryCode;} 
       @if (countryCode.Equals("CA") || countryCode.Equals("US")) 
       { 
        @Html.DropDownListFor(m => m.ProvState, Model.Provinces) 
       } 
       else 
       { 
        @Html.TextBoxFor(m => m.ProvState, Model.ProvState); 
       } 

我LocatioHelper.cshtml

@helper RenderProvince(LocationModel model) 
{ 
    var countryCode = model.CountryCode; 
    if (countryCode.Equals("CA") || countryCode.Equals("US")) 
    { 
    @Html.DropDownListFor(model.ProvState, model.Provinces) 
    } 
    else 
    { 
    @Html.TextBoxFor(model.ProvState, model.ProvState); 
    } 
} 

我有,我必須明確指定dropDownListFor和TextBoxFor類型的錯誤寫這個幫手,但鑑於我不指定類型。

如何將其移入助手?

+0

究竟你所說的 '幫手' 是什麼意思? – Jonesopolis

+0

這是在共享(app_code)文件夾中使用'@ helper'方法的問題。如果你把輔助方法放在主視圖中,你可以使用'@ Html.'方法。 – Nate

回答

0

按我的意見,你可以裝在一個靜態類自定義的輔助方法,並聲明對HtmlHelper<T>.

public static class CustomHelper 
{ 
public static MvcHtmlString YourCustomHelper<TModel, TValue> (
    this HtmlHelper<TModel> htmlHelper, 
    Expression<Func<TModel, TValue>> expression ----) 
    { 
     //Write your custom logic here. 
    } 
} 

你的方法簡單擴展方法,您可以在您的視圖導入這個類並使用這個輔助方法使用通常的語法@Html.YourCustomHelper()

希望這會有所幫助。

編輯: 在您使用內嵌的helper方法的情況下保持輔助方法,只會在它正在使用您的視圖。否則,請嘗試創建一個如上所述的外部html助手方法。

0

不,這是不可能的。您可以使用@Html.TextBoxFor編寫普通的HTML helper,因爲您的視圖是強類型的。 所以,你需要這樣的東西:

public class HelperExtentions 
{ 
    public static MvcHtmlString DefaultRenderer<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, LocationModel model, SelectList selectList, object htmlAttributes) 
    { 
     var sb = new StringBuilder(); 

     var countryCode = string.IsNullOrEmpty(model.CountryCode):"":model.CountryCode; 
     var dtp = ""; 
     if (countryCode.Equals("CA") || countryCode.Equals("US")) 
     { 
      dtp = htmlHelper.DropDownListFor(expression, selectList, htmlAttributes); 
     } 
     else 
     { 
      dtp = htmlHelper.TextBoxFor(expression, htmlAttributes).ToHtmlString(); 
     } 
     sb.AppendFormat(dtp); 
     return MvcHtmlString.Create(sb.ToString()); 
    } 

} 

然後你可以使用:

@html.DefaultRenderer((m => m.ProvState, Models, newSelectList(/*some list data*/) ,new { @class = "form-control" } 
相關問題