使用Ajax表单和分页 - 在下一页选择中丢失搜索参数

时间:2012-09-03 08:58:50

标签: ajax asp.net-mvc-3

好的 - 有人必须在我面前这样做。

我有一个Ajax表单(Ajax表单助手),它有一个搜索框和一些用于过滤内容的复选框。搜索结果通过局部视图呈现在下方。见下文:

enter image description here

以下是代码:

Search.cshtml

@using (Ajax.BeginForm("SearchStuff", "FooController", new AjaxOptions
{
    InsertionMode = InsertionMode.Replace,
    HttpMethod = "GET",
    OnFailure = "searchFailed",
    LoadingElementId = "progress",
    UpdateTargetId = "search-results",
}))
{
    <div>
        <div class="search-filter">
            <span class="searchFilter">          
                <input type="checkbox" name="chkAll" checked />
                All
                <input type="checkbox" name="chkJournal" />
                Journal
                <input type="checkbox" name="chkBook" />
                Book
                <input type="checkbox" name="chkBookChapter" />
                Book Chapter
                <input type="checkbox" name="chkReport" />
                Report
                <input type="checkbox" name="chkWebsite" />
                Website
                <input type="checkbox" name="chkPersComm" />
                Personal Comm
                <input type="checkbox" name="chkConference" />
                Conference
                <input type="checkbox" name="chkMap" />
                Map
                <input type="checkbox" name="chkThesis" />
                Thesis 
            </span>
        </div>

        <div class="searchbox">
            <input type="search" name="q" autocomplete="off"/>
            <input class="submit-button" type="submit" value="Search" /> 
        </div> 
    </div>
}

<div id="search-results" class="search-results">

</div>

分页问题

我现在开始尝试变得有点聪明,并且我已经包含了一个Ajax寻呼机,以便在第一组搜索结果中返回分页。

enter image description here

问题是,当用户选择要渲染的下一页时,我必须保留ajax搜索表单中的所有值,但是当我在FooController中的SearchStuff方法调试时 - 它对搜索参数一无所知。任何人都可以建议我应该做什么来发送搜索参数?

<div class="pager">
    @Html.Raw(
        Ajax.Pager(new AjaxOptions
        {
            UpdateTargetId = "search-results",
            OnBegin = "beginPaging",
            OnSuccess = "successPaging",
            OnFailure = "failurePaging"
        },
                      Model.PageSize,
                      Model.PageNumber,
                      Model.TotalItemCount,


                      new { controller = "FooController", action = "SearchStuff"})
    )
</div>

1 个答案:

答案 0 :(得分:0)

在新的AjaxOptions中使用HttpMethod =“Get”。并使用Request []更改控制器以获取搜索参数。

参见

Filter is getting lost in WebGrid + Paging + Sorting + Filtering in .NET 4.0