Запись формы MVC с несколькими параметрами

#c# #asp.net-mvc #asp.net-mvc-3 #model

#c# #asp.net-mvc #asp.net-mvc-3 #Модель

Вопрос:

Итак, у меня есть метод действия, подобный этому:

 public ViewResult CareerSearch()
{
    CareerSearchModel model = GetCareerSearchModel();

    return View("Search", model);
}
  

В представлении я вручную создаю список флажков из одного из свойств модели. Результат этого в конечном итоге выглядит примерно так:

 <input id="location51438342" type="checkbox" checked="True" value="2" name="locations">
<label for="location51438342">Austin</label>
<input id="location14609737" type="checkbox" checked="True" value="9" name="locations">
<label for="location14609737">Dallas</label>
<input id="location25198218" type="checkbox" checked="True" value="11" name="locations">
<label for="location25198218">Houston</label>
  

Итак, в методе action, который обрабатывает запись формы, я хочу получить ссылку на модель И целочисленный массив checkbox. Однако, когда я выполняю следующий метод действия, значение «model» равно нулю:

 [HttpPost]
public ViewResult CareerSearch(CareerSearchModel model, int[] locations)
{
    //omitted for brevity
}
  

Чего мне здесь не хватает? Как мне получить ссылку на мою модель И массив значений флажков?

Комментарии:

1. Есть ли у модели свойство под названием «locations», которое вы пытаетесь привязать? Или вы имеете в виду другие свойства, которые вы не показываете в примере?

Ответ №1:

вам также пришлось бы отправлять обратно все поля самой модели, чтобы они были в метках hiddenfor внутри формы. вы можете использовать firebug, чтобы посмотреть, что отправлено обратно. если она не отправляется обратно, вам придется воссоздать ее в своем действии после публикации.

Ответ №2:

Модель нигде не сохраняется на сервере и автоматически не публикуется обратно в данных публикации (используйте Fiddler для подтверждения). Вы должны создать экземпляр модели таким же образом, как вы делаете в действии GET, и использовать другие параметры, чтобы соответствующим образом ее изменить.

Смотрите в NerdDinner о том, как отобразить данные формы POST в вашей модели.