Это моя модель:
public class IndexViewModel
{
public FilterConditions conditions { get; set }
public IEnumerable<SelectListItem> Countries { get; set }
}
public class FilterConditions
{
public string condition11 { get; set }
// ...
}
И у меня есть Index
метод действия, подобный так:
public ActionResult Index()
{
var model = new IndexViewModel();
// fill the model here with default values
return View(model);
}
Представление отображает форму с условиями фильтра в качестве типов ввода.
Теперь я хочу, чтобы сообщение из этой формы обрабатывалось этим методом действия:
[HttpPost]
public ActionResult Index(FilterConditions model)
{
// do some magic with model and return another view here
}
и это действительно работает (я поставил точку останова в методе, и он вызывается), но свойства моей модели всегда пусты (значения по умолчанию), в то время как они должны содержать значения, которые были отправлены формой.
Когда я изменяю метод действия следующим образом:
[HttpPost]
public ActionResult Index(IndexViewModel model)
{
// do some magic with model.conditions and return another view here
}
Все работает так, как должно, но это не «правильно» (ИМХО), поскольку мне не нужен список «Страна» по возвращении, мне нужна только выбранная страна (что является одним из условий).
Каков хороший (лучший метод) способ выполнить эту работу, не принимая всю исходную модель представления в качестве входного параметра?
Кстати, я использую ASP.NET MVC 2 (я не думаю, что это действительно имеет значение, поскольку я думаю, что это та же проблема в MVC 3, но я не совсем уверен в этом).
(Я искал в интернете «лучшие практики» в отношении выпадающих списков и моделей представления в рамках asp.net mvc, но разные рекомендации, которые я нашел, на самом деле не совпадали друг с другом, и многие из них уже устарели Я не нашел «официальной» лучшей практики по этому поводу. Я надеюсь, что я иду в правильном направлении (имея список как часть моей модели представления), не стесняйтесь поправлять меня в этом вопросе, если я нет. Также не стесняйтесь указывать мне «одобренные лучшие практики» по этому поводу, если вы знаете что-либо.
Обновление :
Я обнаружил, что могу использовать атрибут [Bind] с префиксом «условия фильтра». И это действительно работает для этого взгляда. Но моя первоначальная проблема (я признаю, она не была включена в мой вопрос) не решена.
Бывает, что этот конкретный метод действия также вызывается из другого представления (это ajax-вызов), где у него нет этого префикса, в этом случае он больше не работает. Есть предложения?