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(); });