ТЛ; др
Как изменить сгенерированные имена элементов формы, чтобы использовать вместо них псевдонимы из ModelMetadata.AdditionalValues
? Желательно с пользовательским (или не пользовательским) помощником html.
У меня есть модель представления поиска с некоторыми пользовательскими свойствами объекта. Каждое свойство идет еще два свойства, на мой взгляд. Я также использую шаблоны редактора на мой взгляд. Моя форма заканчивается следующими элементами:
HTML
<input name="Field1.Field.Id" id="..." type="..." />
<input name="Field1.Field.Label" id="..." type="..." />
<input name="Field2.Field.Id" id="..." type="..." />
<input name="Field2.Field.Label" id="..." type="..." />
Search.spark (.aspx)
${ Html.EditorFor(m => m.Field1) } // Field1 is of type SearchField
${ Html.EditorFor(m => m.Field2) } // Field2 is of type SearchField
etc...
SearchField.spark (.ascx)
<viewdata model="SearchField" />
// *snip*
${ Html.EditorFor(m => m.Field) } // Field is of type SpecialField
SpecialField.spark (.ascx)
<viewdata model="SpecialField" />
${ Html.HiddenFor(m => m.Id) } // Id is of type int?
${ Html.TextBoxFor(m => m.Label } // Label is of type string
Поскольку форма использует GET
, я получаю очень длинные строки запроса. То, что я хотел бы сделать, это предоставить псевдонимы для свойств. У меня уже есть атрибут, поставщик метаданных модели для заполнения AdditionalValues
и настраиваемый механизм связывания моделей, чтобы позаботиться о псевдонимах, но я застрял при создании правильного html.
Я думал, что просто напишу специальный помощник по html, но застрял довольно быстро.
public static MvcHtmlString HiddenForA<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
if (metadata.AdditionalValues.ContainsKey("Alias"))
{
string alias = (string)metadata.AdditionalValues["Alias"];
// what to do now?
}
}