2012-01-20 14 views
4

私はAsp.Net MVC3のWebGridコントロールに少し問題があります。私が欲しいのは、ajaxとwebgridを使って検索ビューを実行することです。このような何か:Asp Mvc3 webgrid ajaxによるページングとフィルタリング

検索基準_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __

件名:_ __ _ _

タスクの種類:_ ____

は、検索


WebGridのwithPaging

を提出します。

ボタン検索をクリックすると、ajaxでHTTPostアクションが呼び出され、検索条件が適用されます。しかし、私がページングをしようとすると、HTTPGetアクションに行きます。このようにして、検索基準によるフィルタは実行されない。

グリッドを部分的なビューの内側に配置します。

@model IEnumerable<MVC3.Models.Task> 
@{ 
    var grid = new WebGrid(null, rowsPerPage: 2, canPage: true, canSort: true, ajaxUpdateContainerId: "myGrid"); 
    grid.Bind(Model, rowCount: 3, autoSortAndPage: true); 
    grid.Pager(mode: WebGridPagerModes.All); 
    @grid.GetHtml(
    columns: grid.Columns(
      grid.Column(format: (item) => Html.ActionLink("Assign Notifications", "AssignNotifications", new { id = item.TaskId })), 
      grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { id = item.TaskId })), 
      grid.Column(format: (item) => Html.ActionLink("Delete", "Delete", new { id = item.TaskId })), 
      grid.Column("Subject"), 
      grid.Column("Comment"), 
      grid.Column(columnName: "Status", header: "Status", format: (item) => item.TaskStatu.Name), 
      grid.Column(columnName: "StartDate", header: "Start Date", format: (item) => item.StartDate.ToString("MM/dd/yyy")), 
      grid.Column(columnName: "Deadline", header: "Dead Line", format: (item) => item.Deadline.ToString("MM/dd/yyy")) 
      ) 
    ); 
} 

そして、私のIndexビューは、次のようになります:そこにコードがある誰もが私の問題を解決する方法を知っていれば、私は感謝するだろうだから、

@model MVC3.ViewModel.TaskSearchViewModel 
@{ 
    ViewBag.Title = "Index"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
<h2> 
    Task Index</h2> 
<hr /> 
@using (Ajax.BeginForm(new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "myGrid" })) 
{ 
    <div id="Filters"> 
     <fieldset> 
      <legend>Search criteria</legend> 
      <br /> 
      <table> 
       <tr> 
        <td> 
         @Html.LabelFor(x => x.Subject) 
        </td> 
        <td> 
         @Html.TextBoxFor(x => x.Subject, new { style = "width: 255px;" }) 
        </td> 
       </tr> 
       <tr> 
        <td> 
         @Html.LabelFor(x => x.TaskTypeId) 
        </td> 
        <td> 
         @Html.DropDownListFor(x => x.TaskTypeId, Model.GetTaskTypesSelectList(), "Select", new { style = "width: 260px;" }) 
        </td> 
       </tr> 
       <tr> 
        <td> 
         @Html.LabelFor(x => x.ResponsableId) 
        </td> 
        <td> 
         @Html.DropDownListFor(x => x.ResponsableId, Model.GetResponsablesSelectList(), "Select", new { style = "width: 260px;" }) 
        </td> 
       </tr> 
       <tr> 
        <td> 
         @Html.LabelFor(x => x.StatusId) 
        </td> 
        <td> 
         @Html.DropDownListFor(x => x.StatusId, Model.GetStatusSelectList(), "Select", new { style = "width: 260px;" }) 
        </td> 
       </tr> 
      </table> 
     </fieldset> 
    </div> 
    @Html.Hidden("page") 
    <input id="btnSearch" type="submit" value="Search" /> 
} 
<br /> 
<div id="myGrid"> 
    @Html.Partial("_TaskSearchResult", Model.ResultTask) 
</div> 
<br /> 
@Html.ActionLink("Create new Task", "NewTask") 

私はあなたがするたびにあなたは、次のページのリンクをクリックしてグリッドを交換しているので、それはだと思う

+0

私は同じ問題を抱えています。 http://stackoverflow.com/questions/8999390/mvc-3-webgrid-paging-doesnt-return-orginal-search-results –

+0

ここに私が使用した解決策があります。 http://forums.asp.net/t/1742017.aspx/1 –

答えて

0

アルトゥーロ 挨拶。グリッドは、各ページャ項目(および列ヘッダー)のonclick呼び出しは、あなただけではAjaxのメソッドを呼び出してデフォルト値を置き換えるためにjQueryを使用することができませんでし生成として

@model IEnumerable<MVC3.Models.Task> 
@{ 
    var grid = new WebGrid(null, rowsPerPage: 2, canPage: true, canSort: true, ajaxUpdateContainerId: "myGrid"); 
    grid.Bind(Model, rowCount: 3, autoSortAndPage: true); 
    grid.Pager(mode: WebGridPagerModes.All); 
<div id="myGrid"> 
    @grid.GetHtml(
    columns: grid.Columns(
      grid.Column(format: (item) => Html.ActionLink("Assign Notifications", "AssignNotifications", new { id = item.TaskId })), 
      grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { id = item.TaskId })), 
      grid.Column(format: (item) => Html.ActionLink("Delete", "Delete", new { id = item.TaskId })), 
      grid.Column("Subject"), 
      grid.Column("Comment"), 
      grid.Column(columnName: "Status", header: "Status", format: (item) => item.TaskStatu.Name), 
      grid.Column(columnName: "StartDate", header: "Start Date", format: (item) => item.StartDate.ToString("MM/dd/yyy")), 
      grid.Column(columnName: "Deadline", header: "Dead Line", format: (item) => item.Deadline.ToString("MM/dd/yyy")) 
      ) 
    ); 
</div> 
} 
+0

これがフィルター基準を戻すためにどのように役立つかわかりません。グリッドは、並べ替えの列、ソートの方向とページ番号(ページャの場合)を含む呼び出すURLを生成し、何らかの方法でこれを増やす必要があります。 – jwsadler

1

を見て:たぶん、それをこのようなものを使用しますフォームを戻しますか?

関連する問題