Изменить HTML-помощники в ASP.NET MVC 2 - PullRequest
1 голос
/ 13 января 2011

Я хочу изменить помощников, таких как этот:

<%= Html.CheckBoxFor(m => m.Current, new { @class = "economicTextBox", propertyName = "Current", onchange = "UseCurrent();UpdateField(this);" })%>

также принять в качестве параметра другую строку, которая обозначает разрешение в приложении, а затем ВНУТРИ метода, который я бы определил, возвращать или нет фактический HTML или ничего, в зависимости от их разрешения.

Как бы я это сделал?

ОБНОВЛЕНИЕ 2: флажок не отображается как только для чтения

Когда я отлаживаю и проверяю значение htmlHelper.CheckBoxFor (expression, mergedHtmlAttributes) ._, я получаю это

<input checked="checked" class="economicTextBox" id="Current" name="Current" onchange="UseCurrent();UpdateField(this);" propertyName="Current" readonly="true" type="checkbox" value="true" /><input name="Current" type="hidden" value="false" />

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

Ответы [ 2 ]

3 голосов
/ 13 января 2011

Вы можете написать собственный помощник:

public static MvcHtmlString MyCheckBoxFor<TModel>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, bool>> expression, 
    string permission, 
    object htmlAttributes
)
{
    if (permission == "foo bar")
    {
        // the user has the foo bar permission => render the checkbox
        return htmlHelper.CheckBoxFor(expression, htmlAttributes);
    }
    // the user has no permission => render empty string
    return MvcHtmlString.Empty;
}

, а затем:

<%= Html.CheckBoxFor(
    m => m.Current, 
    "some permission string",
    new {  
        @class = "economicTextBox", 
        propertyName = "Current", 
        onchange = "UseCurrent();UpdateField(this);" 
    }) 
%>

ОБНОВЛЕНИЕ:

Вот как вы можете изменить помощник HTMLтак что он отображает флажок только для чтения вместо пустой строки, если у пользователя нет прав доступа:

public static MvcHtmlString MyCheckBoxFor<TModel>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, bool>> expression,
    string permission,
    object htmlAttributes
)
{
    if (permission == "foo bar")
    {
        // the user has the foo bar permission => render the checkbox
        return htmlHelper.CheckBoxFor(expression, htmlAttributes);
    }
    // the user has no permission => render a readonly checkbox
    var mergedHtmlAttributes = new RouteValueDictionary(htmlAttributes);
    mergedHtmlAttributes["readonly"] = "readonly";
    return htmlHelper.CheckBoxFor(expression, mergedHtmlAttributes);
}
2 голосов
/ 13 января 2011

Чтобы сделать то, что вы хотите, вам нужно создать свой собственный HTML Helper.Методы HTML Helper - это просто методы расширения.Таким образом, вы можете легко создать свой собственный, который выполняет надлежащую проверку разрешений, а затем, если он проходит, вызовите Html.CheckBoxFor по умолчанию с остальными параметрами.

Этот предыдущий вопрос имеетдостойный пример создания пользовательских помощников.

...