Есть ли способ сделать отражение для свойства модели представления как элемента с разными именами и идентификаторами на стороне html.
Это основной вопрос того, чего я хочу достичь. Итак, базовое введение для вопроса таково:
1- У меня есть модель представления (в качестве примера), созданная для операции фильтра со стороны вида.
public class FilterViewModel
{
public string FilterParameter { get; set; }
}
2- У меня есть действие контроллера, которое создается для значений формы GETting (здесь это фильтр)
public ActionResult Index(FilterViewModel filter)
{
return View();
}
3- У меня есть представление, что пользователь может фильтровать некоторые данные и отправлять параметры через querystring через форму submit.
@using (Html.BeginForm("Index", "Demo", FormMethod.Get))
{
@Html.LabelFor(model => model.FilterParameter)
@Html.EditorFor(model => model.FilterParameter)
<input type="submit" value="Do Filter" />
}
4- И то, что я хочу видеть в визуализированном представлении представления,
<form action="/Demo" method="get">
<label for="fp">FilterParameter</label>
<input id="fp" name="fp" type="text" />
<input type="submit" value="Do Filter" />
</form>
5- И в качестве решения я хочу изменить свою модель представления следующим образом:
public class FilterViewModel
{
[BindParameter("fp")]
[BindParameter("filter")] // this one extra alias
[BindParameter("param")] //this one extra alias
public string FilterParameter { get; set; }
}
Итак, основной вопрос касается BindAttribute, но использование свойств сложного типа. Но также, если есть встроенный способ сделать это намного лучше. Встроенные профи:
1- Использование с TextBoxFor, EditorFor, LabelFor и другими сильно типизированными помощниками модели просмотра может лучше понимать и обмениваться друг с другом.
2- Поддержка маршрутизации по URL-адресам
3 Без создания проблем:
В общем, мы рекомендуем, чтобы люди не писали пользовательские привязки моделей потому что им трудно получить право, и они редко нужны. вопрос, который я обсуждаю на этом посту, может быть одним из тех случаев, когда это оправдано.
А также после некоторых исследований я нашел эти полезные работы:
Свойство привязки модели с другим именем
Одноэтапное обновление первой ссылки
Вот несколько справочных материалов
Результат: Но ни один из них не дает мне своих проблем точное решение. Я ищу строго типизированное решение этой проблемы. Конечно, если вы знаете любой другой способ, пожалуйста, поделитесь.
Обновление
Основные причины, по которым я хочу сделать это, в основном:
1- Каждый раз, когда я хочу изменить имя элемента управления html, мне нужно изменить PropertyName во время компиляции. (Существует разница Изменение имени свойства между изменением строки в коде)
2- Я хочу скрыть (камуфляж) имена реальных объектов от конечных пользователей. В большинстве случаев имена свойств Model Model аналогичны именам объектов Entity Objects. (Для удобства чтения)
3- Я не хочу удалять читаемость для разработчика. Подумайте о множестве свойств с длиной в 2-3 символа и с смыслами mo.
4- Написано множество моделей взглядов. Поэтому изменение их имен займет больше времени, чем это решение.
5- Это будет лучшее решение (в моем POV), чем другие, которые до сих пор описаны в других вопросах.