ASP.NET mvc Ajax Helper DropDownList для отправки значения выбранного элемента в качестве параметра в контроллер

Проблема Я хочу, чтобы моя форма Ajax передавала значение выбранного DropDownListFor в контроллер, но я не могу понять, почему контроллер не принимает никакого значения. Я работаю с ASP.NET MVC, и я хотел бы придерживаться вспомогательных функций столько, сколько я могу.

Посмотреть

@using (Ajax.BeginForm(new AjaxOptions {
HttpMethod = "Get", 
UpdateTargetId = "UserResults",
InsertionMode = System.Web.Mvc.Ajax.InsertionMode.Replace }))
{
    @Html.DropDownListFor(Model => Model.Roles, new SelectLi(ViewBag.Groups 
    as System.Collections.IEnumerable, "Value", "Text"), "Select a group",
    new { id = "Value", onchange = "$(this.form).submit();" })
}
@Html.Partial("_UsersGroup", ViewData)

контроллер

public ActionResult test(int? selectGroup)
{

// Generate dropdownlist Groups
List<SelectListItem> groupList = new List<SelectListItem>();
var query = from s in db.Roles select s;
if (query.Count() > 0)
{
    foreach (var v in query)
    {
        groupList.Add(new SelectListItem { Text = v.Name, Value =
        v.ID.ToString() });
    }
}
ViewBag.Groups = groupList;
// End

// This part is supposed to take the passed value as parameter
if (selectGroup == null)
{
    // To do code comes here, which takes selectGroup as parameter
}

подробности

Форма должна передавать значение, основанное на выборе, в контроллер, который принимает его как "selectGroup".

пс. я впервые задаю вопрос, извините, если допустил ошибку.

1 ответ

Решение

Параметр вашего метода должен соответствовать имени элемента управления, который name="Roles" поэтому метод должен быть

public ActionResult test(int? roles)

Другие потенциальные проблемы с вашим кодом

Ваш контроллер генерирует List<SelectListItem> для использования в раскрывающемся списке. Нет необходимости в ненужных дополнительных затратах для создания нового SelectList (который IEnumerable<SelectListItem>) от него. Код вида может быть просто @Html.DropDownListFor(m => m.Roles, (IEnumerable<SelectListItem>)ViewBag.Groups, "Select a group")

Не использовать Model (заглавная М) в выражении. Если вы сделаете любую другую ссылку на модель в вашем представлении (например, @Model.SomeProperty) вы получите ошибку. Использование нижнего регистра model => model.somProperty все в порядке, но вы можете просто использовать m => m.someProperty

Помощник сгенерирует id атрибут (в вашем случае id="Role") так что непонятно почему вы добавляете new { id = "Value", ..}тем более что вы, кажется, не ссылаетесь на элемент по id в любом месте

Научитесь использовать ненавязчивый Javascript вместо того, чтобы загрязнять вас, отмечая поведение. Удалить onclick атрибут и использование $('#Roles').change(function() { $('form').submit(); });

Другие вопросы по тегам