3

私は MVCGrid.net を使用しています ( http://mvcgrid.net)。まず第一に、素晴らしいグリッド ツールです。グリッドは正常に動作していますが、グリッドにデータを入力するときは、RetrieveDataMethod に追加のパラメーターを渡す必要があります。渡す必要がある値はビュー モデルの一部であり、AdditionalQueryOption として渡す必要があると確信しています。クライアント側のイベントの後にのみ送信したくないので、これをフィルターにしたくありません。常にRetrieveDataMethodに渡したいです。非表示の入力に data-mvcgrid-type='additionalQueryOption' を追加しようとしましたが、まだ送信されませんでした。次に、イベントをトリガーするには data-mvcgrid-apply-additional='event' が必要であることに気付きました。これはフィルターとどう違うのですか?非表示の値を追加のクエリ オプションとして登録するためにフックできるグリッド読み込みイベントはありますか? 何'

グリッドのデータ取得メソッドの定義は次のとおりです。

.WithRetrieveDataMethod((context) =>
{
    var options = context.QueryOptions;
// this is the bit i need
    var projectId = ???;
    options.AdditionalQueryOptions.Add("projectId", projectId);

    int totalRecords;
    var items = ReportManager.GetReports(out totalRecords, options);

    return new QueryResult<ReportSummaryViewModel>()
    {
        Items = items,
        TotalRecords = totalRecords
    };
})

これはビューコードです:

<h1>Reports for @Model.ProjectName</h1>

<p class="form-inline">
    <button type="button" class="btn btn-default" onclick="window.location.href='@Url.Action("Index", "Home")'">Back</button>
    <button type="button" class="btn btn-primary" onclick="window.location.href='@Url.Action("Create", "Reports", new { @id = Model.ProjectId })'">New Report</button>
</p>

<!-- This is the hidden input i'd like to pass as an additional query option-->
@Html.HiddenFor(x => x.ProjectId)

<div id="reportList">
    @Html.MVCGrid("ReportsGrid")
</div>

必要な追加オプションは、クエリ文字列パラメーターとして渡されます。そこで、ドキュメントの準備ができたときに追加のクエリ オプションを設定してみました。

$(function () {
    initAdditionalOptions();
});

function initAdditionalOptions() {
    MVCGrid.setAdditionalQueryOptions("ReportsGrid", { projectId: $('#ProjectId').val() });
}

これは技術的には機能しますが、ID が URL に 2 回含まれるようになりました: /Reports/Index/21?projectid=21

私はこれで暮らすことができますが、ここでより良いアプローチはありますか?

4

1 に答える 1

9

あなたがやろうとしていることを正確に行うために、ページパラメータと呼ばれる新しい機能が最近追加されました。最新の NuGet パッケージを使用していることを確認してください。

使用方法は次のとおりです。

1) これをグリッド構成に追加します。

.WithPageParameterNames("ProjectId")

2) ビューからパラメータの値を渡す

@Html.MVCGrid("PPGrid", new { ProjectId = "whatever" })

3) RetrieveDataMethod で値を使用する

string projectIdVal = context.QueryOptions.GetPageParameterString("ProjectId");

于 2015-05-06T14:34:30.063 に答える