问题 我希望我的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。这是我第一次提出问题,如果我犯了错误,我很抱歉。
答案 0 :(得分: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(); });