ASP.NET MVC Ajax:如何从select中将参数值传递给Ajax动作?

时间:2009-10-28 19:56:48

标签: jquery asp.net-mvc ajax asp.net-ajax

我希望有一个过滤页面执行ajax请求来异步更新结果列表。

有两个带有选项值的组合框和一个Ajax.ActionLink。 该列表呈现为div内的部分视图。

我知道如何实现控制器部分以及交互逻辑。我缺少的是如何在Ajax.ActionLink调用中传递参数。

当用户点击链接时,我想更新呈现为“SubList”局部视图的列表。

    <%= Html.DropDownList("branches", Model.Branches) %>
    <%= Html.DropDownList("regions", Model.Regions) %>
    <%= Ajax.ActionLink("Filter", "SubList", 
        new {branchID = ??, regionID = ??}, 
        new AjaxOptions() { UpdateTargetId = "theList"} ) %>
    <div id="theList">
        <% Html.RenderPartial("SubList", Model.List); %>
    </div>

为部分视图提取数据的Controller操作:

public ActionResult SubList(int branchId, int regionId)
{
    if (this.Request.IsAjaxRequest())
    {
        List<Company> filtered = this.repository.QueryCompanies().Where(c => c.BranchID == branchId && c.RegionID == regionId).ToList();
        return PartialView("SubList", filtered);
    }
    return null;
}

如何将branchID和regionID参数(页面上两个下拉列表中的选定值)传递给控制器​​操作SubList?

1 个答案:

答案 0 :(得分:3)

这应该在javascript中使用form代替anchor。没有任何东西可以放在??的位置以使其有效。您无法在服务器端设置这些值,因为它们可能在客户端更改。因此,基本上您需要连接两个选项的onchange事件并使用新值更新链接网址,或者只使用form

行间的一些事情:

<% using (Ajax.BeginForm("SubList", new AjaxOptions() { 
    UpdateTargetId = "theList" 
})) { %>
    <%= Html.DropDownList("branchId", Model.Branches) %>
    <%= Html.DropDownList("regionId", Model.Regions) %>
    <input type="submit" value="Filter" />
<% } %>

<div id="theList">
    <% Html.RenderPartial("SubList", Model.List); %>
</div>