Каков правильный способ MVC для создания пользовательского элемента управления формой (например, выпадающего списка)? Мне нужен способ создания такого контроля и повторного использования его на нескольких страницах. Я хочу использовать связующее значение по умолчанию , чтобы связать выбранное значение при вызове метода действия. Может кто-нибудь дать простой пример, как это делается?Пользовательский контроль ASP.NET MVC2
Вот мое текущее решение, которое, по моему мнению, не очень хорошо спроектировано.
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? Или есть другой лучший способ его реализовать?
+1 избили меня до этого, и более чистый/лаконичный для загрузки! – RPM1984
@ RPM1984: Спасибо за вашу честность и честность! –
Я на самом деле использую смесь обоих методов, которые вы описываете, но у меня другая проблема. Пожалуйста, прочитайте EDIT – devfreak