2009-10-05 21 views
0

我很努力去掌握在我的asp.net MVC应用程序中的特定窗体设置。 目前我有一个显示大量数据的页面。在这个页面上是一个简单的表单,它调用一个在发布时通过ajax-jform返回partialview的action方法。 这一切都很好,直到我尝试添加寻呼支持搜索结果。ASP.NET MVC - 如何页面ajax搜索结果?

我有一段代码将分页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

好的,所以我设法让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); 

这似乎是做伎俩,虽然它不是很好:)