Может кто-то прояснит мне кое-что. В моем приложении ASP.NET MVC 2 у меня есть класс BaseViewModel
, который включает в себя следующий метод:
public virtual IDictionary<string, object> GetHtmlAttributes<TModel, TProperty>
(Expression<Func<TModel, TProperty>> propertyExpression)
{
return new Dictionary<string, object>();
}
Идея состоит в том, что каждая модель просмотра может переопределить этот метод и предоставить подходящий набор атрибутов html на основе некоторой логики для визуализации в представлении:
<%: Html.TextBoxFor(model => model.MyProperty, Model.GetHtmlAttributes
(model => model.MyProperty)) %>
Однако, когда используется как в строке выше, я получаю ошибку компиляции, когда я нажимаю представление:
Аргументы типа для метода '
...BaseViewModel.GetHtmlAttributes<TModel,TProperty> Expression<System.Func<TModel,TProperty>)
' не могут быть выведены из использования. Попробуйте явно указать аргументы типа.
Мне нужно сделать следующее:
<%: Html.TextBoxFor(model => model.MyProperty, Model.GetHtmlAttributes
<ChildModel, string>(model => model.MyProperty)) %>
Я просто ищу некоторую ясность относительно того, как он пытается вывести тип, без проблем в методе расширения HtmlHelper/TextBoxFor
?
Это потому, что HtmlHelper
в представлении будет автоматически для того же типа, что указан в ViewUserControl
в верхней части страницы, тогда как мой код может быть для любого типа, наследующего от BaseViewModel
? Можно ли написать это так, чтобы он мог выводить мои типы моделей/свойств?