ASP.NET MVC 3 DropDownList selectedindexchanged

Pau*_*aul 5 asp.net-mvc razor drop-down-menu

我有一项功能,允许用户根据自己的状态代码过滤记录.在菜单中,我有一个自定义过滤器部分:

<h3>Custom Filters</h3>
 <br />
   <ul id="ui-ajax-tabs">
      @{ Html.RenderAction("GetGroups", "Manage");}
    </ul>
Run Code Online (Sandbox Code Playgroud)

而我的部分观点如下:

@model IEnumerable<AllEngage.Model.Group>

@using AllEngage.Web.Helpers

@foreach (var group in Model)
{
    <li>
        <label for="@group.GroupName">@group.GroupName</label>
        @Html.DropDownList("GroupItems", group.GroupItems.ToSelectListItems())
    </li>
}
Run Code Online (Sandbox Code Playgroud)

从下拉列表中选择一个项目时,我想在我的控制器中触发一个操作方法:

[HttpGet]
public ActionResult Index(int page = 1, int groupFilterId = -1)
Run Code Online (Sandbox Code Playgroud)

什么是最好的方式去?使用json开火还是以某种方式回复帖子?

Sam*_*ich 8

你需要把你的param传递给行动.执行此操作的方法 - 通过查询字符串传递与操作中的param相同的名称:

http://mysite/GetGroups?groupFilterId=2
Run Code Online (Sandbox Code Playgroud)

要刷新它,您需要发送带有param whitch的ajax请求将触发onchange下拉控件.为过滤器控件指定一些ID:

@Html.DropDownList("GroupItems", group.GroupItems.ToSelectListItems(), new {@id="ddlFilter"})
Run Code Online (Sandbox Code Playgroud)

然后使用jQuery发出数据的GET请求:

$('#ddlFilter').change(function() {
  var queryLink = '@Url.Action("GetGroups")';
  if ($(this).val() != '') {
      queryLink += '?groupFilterId=2';
  }

  $.get(queryLink, function(data) {
      $('#ui-ajax-tabs').html(data);
  });
});   
Run Code Online (Sandbox Code Playgroud)