Метод HTML Helper Extension для Html.Textbox - PullRequest
0 голосов
/ 14 января 2011

Итак, у меня есть метод расширения для метода Html.CheckBoxFor (), который позволяет пользователю передавать массив разрешений следующим образом:

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

Метод выглядит следующим образом:

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);
        }

По сути, я хочу создать точно такую ​​же вещь, за исключением метода Html.TextBox, который мы сейчас называем так:

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

Поскольку этот помощник немного отличается, я недействительно уверен, как отформатировать метод.

Любая помощь будет принята с благодарностью.Спасибо!

1 Ответ

2 голосов
/ 14 января 2011
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);
}

и затем:

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

и если вы хотите иметь формат, вы можете использовать нетипизированные помощники:

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);
}

и звоните так:

<%= 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" 
    }
) %>
...