我正在努力掌握我的asp.net MVC应用程序中的特定表单设置。 目前我有一个页面显示一大块数据。在这个页面上是一个简单的表单,它调用一个action方法,在发布时返回一个partialview(通过ajax-jform)。 在我尝试为搜索结果添加分页支持之前,这一切都很顺利。
我有一大堆代码会对IQueryable进行分页,但我不知道如何在我当前的设置中实现它。
下面是一些代码:
[Authorize]
public ActionResult AssetSearch(string RoomID, string type, string keyword, string risks)
{
//check values passed in
Guid? r = null;
if (RoomID != "Any" && RoomID != null)
r = new Guid(RoomID);
string t = type == "Any" ? null : type;
string risk = risks == "Any" ? null : risks;
var assets = surveyRepository.GetAssetsSearch(r, t, keyword, risk);
if (Request.IsAjaxRequest())
{
return PartialView("AssetListControl", assets);
}
else
{
return View("AssetListControl", assets);
}
}
此操作方法返回一个局部视图,该视图通过以下jquery在div中呈现出来。
$(document).ready(function() {
$("#searchForm").submit(function() {
$("#searchForm").ajaxSubmit({ target: '#results', beforeSubmit: PreSub, success: Success });
return false;
});
});
function Success(responseText, statusText) {
$("#loadingMessage").html("done");
$('#resultsTable').tablesorter();
$("#results").slideDown("slow");
}
function PreSub(formData, jqForm, options) {
$("#loadingMessage").html("loading...").fadeIn();
$("#results").slideUp("fast");
return true;
}
我的表格如下:
<form id="searchForm" action="<%=Url.Action("AssetSearch") %>" method="post">
<fieldset>
<label for="RoomID">
Room Name</label>
<%= Html.DropDownList("RoomID") %>
<label for="Type">
Asset Type</label>
<%= Html.DropDownList("Type") %>
<label for="Risks">
Risk Level</label>
<%= Html.DropDownList("Risks") %>
<label for="Keyword">
Keyword</label>
<%= Html.TextBox("Keyword") %>
<input type="submit" name="sumbit" id="searchBtn" value="Search" />
</fieldset>
</form>
对不起代码重载: - )
我感觉我已经配置了我的控制器和视图,这样分页就不容易实现了。欢迎所有建议!
提前致谢!
答案 0 :(得分:0)
好的,所以我设法让它以一种不太吸引人的方式使用AJAX和POST。
首先,我在我的分页结果局部视图中删除了几个锚标记,如果有前一页或下一页,则会显示。这些链接触发javascript函数并传递页面值。导航如下所示:
<% if (Model.HasPreviousPage)
{ %>
<a href="#" onclick="PageResults( <%=Model.PageIndex - 1 %>)">Back</a>
<%} %>
<% if (Model.HasNextPage)
{ %>
<a href="#" onclick="PageResults( <%=Model.PageIndex + 1 %>)">Forward</a>
<%} %>
该功能如下:
function PageResults(page) {
var form = document.forms["searchForm"];
form.elements["page"].value = page;
$("#searchForm").ajaxSubmit({ target: '#results', beforeSubmit: PreSub, success: Success });
return false;
}
我还调整了控制器以接受页面参数,该参数用于检索正确的结果集:
var paginated = new PaginatedList<Asset>(assets, Page ?? 0, 10);
这似乎可以解决问题,虽然不是很好:)