2011-01-14 7 views
0

Also habe ich eine Erweiterungsmethode für die Html.CheckBoxFor() -Methode, die den Benutzer in einer Reihe von Berechtigungen wie dies passieren kann:HTML Helper Extension-Methode für Html.TextBox

<%= Html.CheckBoxForWithPermission(m => m.Current, new string[] { PERMISSIONS.hasICAdvanced }, new { @class = "economicTextBox", propertyName = "Current", onchange = "UseCurrent();UpdateField(this);" })%> 

Das Verfahren sieht aus wie dies:

public static MvcHtmlString CheckBoxForWithPermission<TModel>(
                  this HtmlHelper<TModel> htmlHelper, 
                  Expression<Func<TModel, bool>> expression, 
                  string[] permissions, 
                  object htmlAttributes 
                 ) 
     { 
      foreach (string permission in permissions) 
      { 
       if (Chatham.Web.UI.Extranet.SessionManager.PhysicalUser.IsInRole(permission)) 
       { 
        // the user has the permission => render the checkbox 
        return htmlHelper.CheckBoxFor(expression, htmlAttributes); 
       } 
      } 
      // the user has no permission => render a readonly checkbox 
      var mergedHtmlAttributes = new RouteValueDictionary(htmlAttributes); 
      mergedHtmlAttributes["disabled"] = "disabled"; 
      return htmlHelper.CheckBoxFor(expression, mergedHtmlAttributes); 
     } 

Grundsätzlich möchte ich die genau die gleiche Sache mit Ausnahme eines Html.TextBox Verfahren schaffen, die wir zur Zeit wie folgt aufrufen:

<%= Html.TextBox("RateTimeStamp", Model.RateTimeStamp.HasValue ? Model.RateTimeStamp.Value.ToString("dd-MMM-yyyy") : "", new { @class = "economicTextBox", propertyName = "RateTimeStamp", onchange = "parseAndSetDt(this);", dataType = "Date" })%> 

Da dieser Helfer ein bisschen anders ist, bin ich nicht wirklich sicher, wie man die Methode formatiert.

Jede Hilfe würde sehr geschätzt werden. Vielen Dank!

Antwort

2
public static MvcHtmlString TextBoxForWithPermission<TModel>(
    this HtmlHelper<TModel> htmlHelper, 
    Expression<Func<TModel, bool>> expression, 
    string[] permissions, 
    object htmlAttributes 
) 
{ 
    foreach (string permission in permissions) 
    { 
     if (Chatham.Web.UI.Extranet.SessionManager.PhysicalUser.IsInRole(permission)) 
     { 
      // the user has the permission => render the textbox 
      return htmlHelper.TextBoxFor(expression, htmlAttributes); 
     } 
    } 

    // the user has no permission => render a readonly checkbox 
    var mergedHtmlAttributes = new RouteValueDictionary(htmlAttributes); 
    mergedHtmlAttributes["disabled"] = "disabled"; 
    return htmlHelper.TextBoxFor(expression, mergedHtmlAttributes); 
} 

und dann:

<%= Html.TextBoxForWithPermission(
    x => x.RateTimeStamp, 
    new string[] { PERMISSIONS.hasICAdvanced }, 
    new { 
     @class = "economicTextBox", 
     propertyName = "RateTimeStamp", 
     onchange = "parseAndSetDt(this);", 
     dataType = "Date" 
    } 
) %> 

und wenn Sie möchten, um das Format haben Sie nicht typisierten Helfer verwenden:

public static MvcHtmlString TextBoxWithPermission<TModel>(
    this HtmlHelper<TModel> htmlHelper, 
    string name, 
    object value, 
    string[] permissions, 
    object htmlAttributes 
) 
{ 
    foreach (string permission in permissions) 
    { 
     if (Chatham.Web.UI.Extranet.SessionManager.PhysicalUser.IsInRole(permission)) 
     { 
      // the user has the permission => render the textbox 
      return htmlHelper.TextBox(name, value, htmlAttributes); 
     } 
    } 

    // the user has no permission => render a readonly checkbox 
    var mergedHtmlAttributes = new RouteValueDictionary(htmlAttributes); 
    mergedHtmlAttributes["disabled"] = "disabled"; 
    return htmlHelper.TextBox(name, value, mergedHtmlAttributes); 
} 

und rufen Sie wie folgt aus:

<%= Html.TextBoxWithPermission(
    "RateTimeStamp", 
    Model.RateTimeStamp.HasValue 
     ? Model.RateTimeStamp.Value.ToString("dd-MMM-yyyy") 
     : "", 
    new string[] { PERMISSIONS.hasICAdvanced }, 
    new { 
     @class = "economicTextBox", 
     propertyName = "RateTimeStamp", 
     onchange = "parseAndSetDt(this);", 
     dataType = "Date" 
    } 
) %>