0

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

Посмотреть

@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 (капитал M) в выражении. Если вы сделаете какую-либо другую ссылку на модель в своем представлении (например, @Model.SomeProperty), вы получите сообщение об ошибке. Использование нижнего регистра model => model.somProperty в порядке, но вы можете просто использовать m => m.someProperty

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

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

+0

Большое спасибо! Определенно собираюсь изучить Unobstusive JavaScript. Я просто очень новичок в программировании. Недавно я узнал, как работать с mvc asp.net. –