ASP.NET MVC 3 DropDownList selectedindexchanged

5

我有一个功能,允许用户根据自己的状态码筛选记录。在菜单中,我有一个自定义筛选器部分:

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

我的部分视图如下:

@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>
}

当从下拉列表中选择一个项目时,我希望在我的控制器中触发一个操作方法:
[HttpGet]
public ActionResult Index(int page = 1, int groupFilterId = -1)

什么是最好的方法?使用json进行传输还是通过某种方式执行post back?
3个回答

8
您需要将参数传递给操作。最快的方法是通过查询字符串传递,名称与操作中的参数相同:
http://mysite/GetGroups?groupFilterId=2

要刷新它,您需要发送带有参数的ajax请求,该参数将在下拉控件的onchange中触发。为您的过滤器控件指定一些ID:

@Html.DropDownList("GroupItems", group.GroupItems.ToSelectListItems(), new {@id="ddlFilter"})

然后使用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);
  });
});   

我认为最好使用Url.Action助手而不是在queryLink变量中硬编码URL。 - epzee
是的,没问题。这只是一个快速的例子。我已经更新了示例。 - Samich
1
我有同样的问题,但我的控制器ActionResult没有刷新视图。你知道为什么吗? - alice7

1

你需要在下拉菜单的点击事件中使用jQuery触发Ajax调用。 首先,在下拉菜单的点击事件上检查如果值发生改变,则调用jQuery Ajax调用 我粘贴了jQuery代码。

 $.get("/Wk/Revision/@hTitle/@pageID/?langID=2", function (data) {
                    $("div#dAjaxContent").html(data);
                    $("div#dShow").css("visibility", "visible");
                    $("#dShow").dialog();
                });

// 这是用于 AJAX 调用的。下拉菜单检查自己。 "/Wk/Revision/@hTitle/@pageID/?langID=2" 这将调用控制器方法 revision。 接下来我想你会做什么。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接