FormCollection, не содержащий элемент управления <select>, добавлен в MVC Razor - PullRequest
0 голосов
/ 22 марта 2011

На мой взгляд, у меня есть выпадающий список, который я заполняю с помощью вызова Ajax.Этот выпадающий находится в форме.Тем не менее, при отправке я не вижу этот элемент управления в форме коллекции.

Еще одна вещь, в качестве альтернативы, когда я пытаюсь добавить Html.DropDownList ("AccountId"), я получаю ошибку - Нет элемента ViewData типа "IEnumerable", который имеет ключ "AccountId".

Перечислен мой вид и код контроллера ...

- Просмотр -

    using (Html.BeginForm("GetNames", "Account", FormMethod.Post, new { id = "accountParameters" }))
    {
        ....
        ....
        <select id="AccountId" runat="server"></select> //This is not available in formcollection
        //Html.DropDownList("AccountId");  //This throws exception

        @:<p><input type='submit' value='Submit'/></p>
    }
    ...
    ...
<script>
        $(document).ready(function () {
            $.ajax({
                url: '/Account/GetAccounts',
                type: "GET",
                success: function (result) {
                    for (i = 0; i < result.length; i++) {
                        $('#AccountId').append($('<option></option>').val(result[i].accountId).html(result[i].name));
                    }
                }
            });
        });
</script>

- Контроллер -

public ActionResult GetAccounts(string id)
{
    return Json(GetAccounts(), JsonRequestBehavior.AllowGet);
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult GetNames(FormCollection formCollection)
{
    if (("AccountId") != null)
    {        
        ....
        ....
    }

}

Ответы [ 2 ]

5 голосов
/ 22 марта 2011

Элемент нуждается в атрибуте имени для отправки обратно в POST-запросе, вы должны изменить свой выбор следующим образом (также отбросьте runat = "server"):

<select id="AccountId" name="AccountId"></select>
0 голосов
/ 22 марта 2011

Если вы используете помощник HTML для создания выпадающего списка, ему нужен IEnumerable для получения параметров. Итак, в вашем контроллере вы можете сделать что-то вроде этого ...

Контроллер

public ActionResult SomeAction()
{
    ViewBag.SelectListItems = new List<SelectListItem>();
    //Stash your items in this list.
}

и в представлении ...

Html.DropDownList("AccountId", Viewbag.SelectListItems);

но в вашем случае, поскольку вы загружаете опции с помощью Ajax, лучше не использовать помощник.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...