ASP.NET MVC 3 DropDownList selectedindexchanged

时间:2011-10-31 10:38:42

标签: asp.net-mvc razor drop-down-menu

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

<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开火还是以某种方式回复帖子?

3 个答案:

答案 0 :(得分:8)

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

http://mysite/GetGroups?groupFilterId=2

要刷新它,您需要发送带有param whitch的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);
  });
});   

答案 1 :(得分: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调用。下拉检查自己做。 “/周/修正/ @ hTitle / @的pageID /?LANGID = 2” 这将调用控制器方法修订版。 接下来我想你会做的。

答案 2 :(得分:0)

我建议做一个帖子请求;你可以用这个构建一个:

http://iridescence.no/post/Invoking-ASPNET-MVC-Actions-from-JavaScript-using-jQuery.aspx

您可以发出AJAX get请求,或者如果您想重定向,可以将JavaScript的window.location更改为指向您想要的操作,如:

window.location = "/MyController/Index";
相关问题