Первоначально я создал шаблон редактора, подобный этому
@model MyModel
var items = // get items
@Html.DropDownListFor(m => m.Id, items, new { id = Html.IdFor(m => m) })
, который был вызван
@Html.EditorFor(m => m.SomeClass)
, где SomeClass
имеет свойство Id
.(IdFor
- один из моих помощников по HTML).
Это сгенерирует что-то вроде этого
<select name="SomeClass.Id" id="SomeClass" />
Теперь я хочу изменить шаблон редактора на помощник HTML, чтобы мойвызов выглядит следующим образом
@Html.CustomEditorFor(m => m.SomeClass)
Я изменяю это с представления на помощник, потому что его проще для повторного использования.
Это примерно то, что у меня есть:
public static MvcHtmlString CustomEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
var idString = htmlHelper.IdFor(expression);
var propertyValue = expression.Compile()(htmlHelper.ViewData.Model);
var items = // get items
return htmlHelper.DropDownListFor(expression, items, new {id = idString});
}
Однако, когда я вызываю редактор, я получаю этот HTML вместо того, что я хочу.
<select name="SomeClass" id="SomeClass" />
Как я могу изменить выражение настолько, чтобы оно могло "обращаться" к свойству Id
?