4

Webグリッドを設定しましたが、正常に機能しているようで、並べ替えとページングが可能です。フィルタオプションを追加しましたが、これもうまく機能しますが、結果をフィルタリングしてから並べ替えると、フィルタが失われ、すべてのレコードが表示されます。

これが私のRazorビューコードです:

@using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "Get", InsertionMode = InsertionMode.Replace, UpdateTargetId = "myGrid" }))
{

@Html.ValidationSummary(true)
<fieldset>
    <legend>Document Search</legend>

    <div class="editor-label">
        @Html.Label("Enter a Document code:")
    </div>
    <div class="editor-field">
        @Html.Editor("search")
    </div>

    <p>
        <input type="submit" value="Search" />
    </p>
</fieldset>
}

@{
    WebGrid grid = new WebGrid(null, rowsPerPage: 10, canPage: true, canSort: true, ajaxUpdateContainerId: "myGrid");
    grid.Bind(Model, autoSortAndPage: true);
}

<div id="myGrid">

    @grid.GetHtml(mode: WebGridPagerModes.All, firstText: "First Page", nextText: "Next", previousText: "Previous", lastText: "Last Page", numericLinksCount: 10,
            columns: grid.Columns(
                grid.Column("DocumentID", "Document Code", canSort: true),
                grid.Column("Title", "Document Title", canSort: true)
        )
    )

</div>

そして、これが私の行動です:

public ActionResult Index(string search)
    {
        List<DocumentIndexViewModel> viewModel = Mapper.Map<List<DocumentIndexViewModel>>(DocumentService.GetDocumentsBySearch(search));
        if (Request.IsAjaxRequest())
            return PartialView("_IndexGrid", viewModel);
        else
            return View(viewModel);
    }

表示されたレコードを並べ替えるときにフィルターを維持するにはどうすればよいですか?どういうわけか、ソートリンクに検索文字列を追加する必要があるようですが、どのように進めるかがわかりません。

4

1 に答える 1

3

フィルタにGETを使用しているので、これはそれを保持するはずです。問題を再現できません。これが私の完全に機能するテストケースです。

モデル:

public class CityViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
}

コントローラ:

public class HomeController : Controller
{
    public ActionResult Index(string search)
    {
        using (var client = new WebClient())
        {
            var query = HttpUtility.ParseQueryString(string.Empty);
            query["q"] = search;
            var json = client.DownloadString("http://gd.geobytes.com/AutoCompleteCity?" + query.ToString());
            var serializer = new JavaScriptSerializer();
            var viewModel = serializer
                .Deserialize<string[]>(json)
                .Select((x, index) => new CityViewModel
                {
                    Id = index,
                    Name = x
                })
                .Where(x => x.Name.StartsWith(search ?? string.Empty, StringComparison.OrdinalIgnoreCase))
                .ToList();

            if (Request.IsAjaxRequest())
            {
                return PartialView("_IndexGrid", viewModel);
            }
            else
            {
                return View(viewModel);
            }
        }
    }
}

メインビュー(~/Views/Home/Index.cshtml):

@model IEnumerable<CityViewModel>

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script type="text/javascript">
    $.ajaxSetup({
        cache: false
    });
</script>

@using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "GET", InsertionMode = InsertionMode.Replace, UpdateTargetId = "gridPartial" }))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Document Search</legend>

        <div class="editor-label">
            @Html.Label("Enter a Document code:")
        </div>
        <div class="editor-field">
            @Html.Editor("search")
        </div>

        <p>
            <input type="submit" value="Search" />
        </p>
    </fieldset>
}

<div id="gridPartial">
    @Html.Partial("_IndexGrid")
</div>

~/Views/Home/_IndexGrid.cshtml部分的:

@model IEnumerable<CityViewModel>

@{
    WebGrid grid = new WebGrid(null, rowsPerPage: 10, canPage: true, canSort: true, ajaxUpdateContainerId: "myGrid");
    grid.Bind(Model, autoSortAndPage: true);
}

<div id="myGrid">
    @grid.GetHtml(mode: WebGridPagerModes.All, firstText: "First Page", nextText: "Next", previousText: "Previous", lastText: "Last Page", numericLinksCount: 10,
        columns: grid.Columns(
            grid.Column("Id", "City Id", canSort: true),
            grid.Column("Name", "City Name", canSort: true)
        )
    )
</div>

並べ替えとページ付けにより、クエリ文字列に含まれていたために入力された検索フィルターが保持されます。

于 2012-09-12T13:16:21.767 に答える