2016-06-03 3 views
2

У меня есть следующий код:EditorFor расширение не работает htmlAttributes в Asp.Net MVC 5.1

public static class HtmlExtendedHelpers 
{ 

    public static IHtmlString eSecretaryEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, 
     Expression<Func<TModel,TProperty>> ex, object htmlAttributes, bool disabled) 
    { 

     if (disabled) 
     { 
      htmlAttributes.Add(new { @disabled = "disabled" }); //searching for working code as replacement for this line 
     } 

     return htmlHelper.EditorFor(ex, htmlAttributes); 

    } 
} 

Она работает при отключении = ложь, и все мои альтернативы терпят неудачу, когда я отключил верно. Тогда ни один из htmlAttributes не записывается.

переменная htmlAttribute имеет значение (включая htmlAttributes свойство :)

htmlAttributes: { class = "form-control" } 

Это потому, что у меня есть класс по умолчанию форм-контроля, и я хочу, чтобы добавить атрибут: Инвалид со значением отключенным.

Кто-нибудь знает, как реализовать это правильно?

PS. Так как Asp.Net MVC 5.1, есть поддержка htmlAttributes

ответ

4

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

var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes); 

if (disabled) 
{ 
    attributes.Add("disabled", "disabled"); 
} 

В качестве альтернативы, вы можете передать атрибут disabled как часть htmlAttributes объекта, то есть вам не потребуется if заявление на всех.

htmlAttributes: { class = "form-control", disabled = "disabled" } 

В зависимости от того, есть ли у Вас собственный шаблон EditorFor или нет, вам, возможно, придется изменить, как вы передаете HTML атрибуты функции EditorFor, в качестве параметра он принимает - additionalViewData не то же самое.

This article подробнее.

Если вы используете шаблон по умолчанию, вы можете передать атрибуты HTML внутри другого анонимного объекта:

return htmlHelper.EditorFor(ex, new { htmlAttributes = attributes }); 

Если у вас есть собственный шаблон, вам нужно будет получить HTML-атрибуты и применять их самостоятельно в вид:

@{ 
    var htmlAttributes = ViewData["htmlAttributes"] ?? new { }; 
} 
0

Вы можете передать атрибуты в htmlAttributes, как показано ниже:

htmlAttributes: { class = "form-control", disbaled="disabled" } 

Также вы можете создать свой атрибут метаданных, которые могут быть украшены на вашей собственности, для которых вы используете редактор.

Чтобы создать собственное свойство метаданных, вы можете реализовать интерфейс IMetadataAware.