MVC3 - объединение атрибутов htmlAttributes, установленных в View, с атрибутами, установленными в Helper - PullRequest
3 голосов
/ 21 ноября 2011

Я использую Отключить автозаполнение в текстовом поле html helper в MVC , чтобы добавить автозаполнение в «off» в текстовых полях:

    public static MvcHtmlString NoAutoCompleteTextBoxFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes)
    {
        return html.TextBoxFor(expression, new { autocomplete = "off" });
    }

Это нормально, если нет атрибутов htmlAttributesвид.К некоторым текстовым полям также добавлен дополнительный класс CSS:

    @Html.NoAutoCompleteTextBoxFor(m => m.UserName, new { @class = "ignore" })

Вместо того, чтобы специально создавать для этого еще один помощник, есть ли способ объединения наборов htmlAttributes?

Спасибозаранее ...

Ответы [ 2 ]

3 голосов
/ 21 ноября 2011

Вы можете использовать RouteValueDictionary.

var attrs = new RouteValueDictionary(htmlAttributes);
attrs ["autocomplete"] = "off";
return html.TextBoxFor(expression, attrs);
1 голос
/ 21 ноября 2011

Да, причина. При передаче объекта в помощник вы можете использовать отражение, чтобы прочитать все свойства (которые соответствуют атрибутам html, которые вы хотите установить) и передать объединенные атрибуты как словарь помощнику:

Dictionary<string, object> attrs = new Dictionary<string, object>();

if (htmlAttributes != null)
{
    foreach (var prop in htmlAttributes.GetType().GetProperties())
    {
        attrs[prop.Name] = prop.GetValue(htmlAttributes, null);
    }
}

// now add your own attribute(s):
htmlAttributes["autocomplete"] = "off";

return html.TextBoxFor(expression, htmlAttributes);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...