Какой правильный способ MVC для создания пользовательского элемента управления формы (например, пользовательский выпадающий список)?Мне нужен способ создать такой элемент управления и повторно использовать его на нескольких страницах.Я хочу использовать связыватель по умолчанию для привязки выбранного значения при вызове метода действия.Может кто-нибудь привести простой пример, как это делается?
Вот мое текущее решение, которое, по моему мнению, не очень хорошо разработано.
DropDownViewModel.cs
class DropDownViewModel {
...
public string BindName {get; set;} // the name that default binder uses to bind to action param
public int SelectedValue {get;set;} // this value should be set when user use the drop down
...
}
DropDown.ascx
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DropDownViewModel>" %>
...
<%= Html.TextBox(Model.BindName) %>
...
Проблема возникает, когда я пытаюсь включить DropDownViewModel в какую-то другую модель представления, например, такую:
GeneralUserInfoViewModel.cs
class GeneralUserInfoViewModel {
...
public DropDownViewModel Gender {get;set;}
...
}
AccountController.cs
...
public ActionResult EditGeneralUserInfo(GeneralUserInfoViewModel info) {
}
...
Для правильной работы BindName должно быть установлено в «Gender.SelectedValue».Это можно решить, установив BindName в RegisterUserViewModel.Но что произойдет, если GeneralUserInfoViewModel является частью другой модели представления, например:
RegisterUserViewModel.cs
class RegisterUserViewModel {
...
public GeneralUserInfoViewModel GeneralInfo {get;set;}
...
}
Теперь для BindName должно быть установлено значение «GeneralInfo.Gender.SelectedValue», чтобы это работалоправильно со связывателем по умолчанию:
...
public ActionResult RegisterUser(RegisterUserViewModel info) { ... }
...
и т. д. Как можно справиться с этим наслоением?Как я могу определить, что должно быть установлено в BindName attr в DropDownVoewModel?Или есть другой лучший способ реализовать это?