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