0

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

附言。这是我第一次问问题,如果我犯了错误,我很抱歉。

4

1 回答 1

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

学习使用不显眼的 Javascript,而不是用行为来标记你。删除onclick属性并使用$('#Roles').change(function() { $('form').submit(); });

于 2015-04-28T22:58:30.363 回答