ASP.NET mvc Ajax Helper DropDownListFor将所选项值作为参数发送到控制器

时间:2015-04-28 15:55:41

标签: asp.net-mvc-4 asp.net-ajax dropdownlistfor ajaxhelper

问题 我希望我的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”。

PS。这是我第一次提出问题,如果我犯了错误,我很抱歉。

1 个答案:

答案 0 :(得分:1)

你方法的参数需要匹配name="Roles"控件的名称,所以方法应该是

public ActionResult test(int? roles)

您的代码的其他潜在问题

您的控制器会生成List<SelectListItem>以供下拉列表使用。从那里创建新的SelectListIEnumerable<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(); });