Может кто-нибудь, пожалуйста, уточнить что-нибудь для меня.В моем приложении 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
?Можно ли написать это так, чтобы это могло вывести мои модели / типы свойств?