我希望有一个过滤页面执行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?
答案 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>