2013-11-19 5 views
1

Я создал расширение HTML Helper, которое вызывает частичный просмотр шаблона (MyView) в MVC.MVC - преобразовать IDictionary или RouteValueDictionary в объект htmlAttributes

Я передаю дополнительные атрибуты HTML в расширение HTML-помощника через параметр htmlAttributes объекта. В Helper Extension HTML в The htmlAttributes преобразуется в RouteValueCollection (можно использовать IDictionary здесь) и хранятся в объекте ModelProperty:

public static MvcHtmlString TextBoxFor(this HtmlHelper html, ModelProperty prop, object htmlAttributes) 
{ 
    prop.ControlHtmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes); 
    return PartialExtensions.Partial(html, "MyView", prop); 
} 

В частичном виде на 'MyView' Я хочу, чтобы сделать управление и переданным HTML атрибуты, так что я называю:

Html.TextArea(Model.ControlName, Model.Value, Model.ControlHtmlAttributes); 

Howvever это dosnt работа, потому что третий параметр должен быть «объект htmlAttributes», как я конвертировать Model.ControlHtmlAttributes объекта htmlAttibutes?

+0

У вас есть опечатка в вашем вызове 'Html.TextBox'. Вместо этого вы расширяете 'TextBoxFor'. –

+0

Нет Я не использую TextBoxFor Я использую TextFor, который принимает следующие параметры. public static MvcHtmlString TextBox (этот HtmlHelper htmlHelper, имя строки, значение объекта, объект htmlAttributes) – gisWeeper

+1

В вашем частичном представлении у вас есть TextArea, ваш html-помощник называется TextBoxFor, а в комментариях вы говорите, что используете TextFor? Пожалуйста, обратите больше внимания при вводе. – ataravati

ответ

8

Чтобы ответить на ваш вопрос в любом случае:

public static object ToAnonymousObject(this IDictionary<string, object> @this) 
    { 
     var expandoObject = new ExpandoObject(); 
     var expandoDictionary = (IDictionary<string, object>) expandoObject; 

     foreach (var keyValuePair in @this) 
     { 
      expandoDictionary.Add(keyValuePair); 
     } 
     return expandoObject; 
    } 
-1

Извинения все - это работает правильно, я использовал неправильную перегрузку на Html.TextArea поэтому он должен прочитать, где второй параметр не является объектом (как это было в оригинале), но должна быть строка:

Html.TextArea(Model.ControlName, Model.AsString(), Model.ControlHtmlAttributes); 
Смежные вопросы