2009-10-28 55 views
2

我想过滤页面执行ajax请求异步更新结果列表。ASP.NET MVC Ajax:如何将参数值传递给来自select的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> 

,对于局部视图中提取数据的控制器的操作:

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参数(选定的值在页面上的两个dropdownlists)提供给控制器动作的子表?

回答

3

这应该用javascript或使用form而不是anchor来完成。没有什么东西可以放在你的??的地方使它工作。您不能在服务器端设置这些值,因为它们可能在客户端更改。所以基本上你需要连接两个选择的onchange事件,并用新值更新你的链接url,或者使用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> 
+0

谢谢达林,Ajax.BeginForm是我一直在寻找的概念。 – Marek 2009-10-28 20:31:04

相关问题