Как опубликовать полный DropDownList из Ajax.BeginForm вместо только выбранного идентификатора - PullRequest
0 голосов
/ 22 августа 2011
//Model
public class SelectModel
{
    public string CategoryId { get; set; }
    public List<SelectListItem> List { get; set; }
}

//ViewModel
public class ViewModel
{
    public SelectModel SelectMod { get; set; }
}

//OnIndex call
@Html.Partial("ViewUserControl1", Model.SelectMod)

//ViewUserControl1.cshtml
@model MvcApplication4.Models.SelectModel
<div id="formid">
    @using (Ajax.BeginForm("Index1", "Home", new AjaxOptions { UpdateTargetId = "formid" }, new { id = "TheForm" }))
    { 
        @Html.DropDownListFor(x => x.CategoryId, Model.List, "--Select One--")
        <input type="submit" name="name" value="Submit" />
    }
</div>

//Controller
 public ActionResult Index1(SelectModel sm)
 {
     return PartialView("ViewUserControl1", sm);
 }

Итак, теперь, когда вы публикуете Ajax.BeginForm, мы получаем selectedId формы, а не ПОЛНЫЙ СПИСОК УДАЛЕНИЯ.Если у меня много выпадающих списков, мне нужно снова создать sm с полным выпадающим списком.Есть ли способ, где я могу отправить весь выпадающий список на контроллер и вернуть обратно тот же.

Обновление: Если в AjaxOptions не должно быть параметра, который позволяет нам публиковатьполный список (если нужно) страницы вместе с selectedIds.

1 Ответ

1 голос
/ 22 августа 2011

Короткий ответ - нет! Так как выпадающие списки в HTML не возвращают всех своих членов, только выбранный (ы).

Более длинный ответ заключается в том, что ASP.NET WebForms позволяет вам делать то, что вы просите, и вы можете воссоздать часть этого, создав механизм, аналогичный ViewState в ASP.NET WebForms.

Что делает ASP.NET WebForms, так это то, что он сохраняет все значения из списка на странице дважды. Оба в списке для отображения, а также копия в скрытом поле под названием ViewState. Затем скрытое поле отправляется обратно на сервер при отправке и используется для повторного заполнения раскрывающегося списка.

Вы можете имитировать то же поведение, которое ASP.NET WebForms использует в MVC, сериализовав вашу коллекцию некоторым образом и поместив ее в скрытое поле. Затем при отправке вы можете десериализовать данные из скрытого поля обратно в коллекцию и использовать их для заполнения раскрывающегося списка.

...