0

ASP.NET MVCで剣道グリッドフィルタをアクションに送信するにはどうすればよいですか?

私はこの構造を使用していますが、機能していますが、コントローラーで送信された値を取得できません。アクションのパラメーター「モデル」が空です。

    $('#btn-print').click(function () {
        filter = $('#trips').data('kendoGrid').dataSource.filter();
        $.ajax({
            type: 'post',
            url: '@Url.Action("Print", "Trips")',
            //dataType: 'json',
            data: filter,
            success: function (d) {
                var win = window.open('about:blank');
                with (win.document) {
                    open();
                    write(d);
                    close();
                }
                //alert('print click.');
            }
        })
    });

ASP.NET アクション

    [HttpPost]
    public ActionResult Print(object model)
    {
        var r = Request;
        return View();
    }

ありがとうございました。:)

4

1 に答える 1

0

あなたのアプローチは私にとって少し驚くべきものです。作成しない理由

var customDS = new kendo.data.dataSource(  
    transport: 
    {
      read: 
      {
        url: '@Url.Action("Print","Trips")',
        dataType: 'aspnetmvc-ajax'
      }
    },
  requestEnd: function (d) {
                var win = window.open('about:blank');
                with (win.document) {
                    open();
                    write(d);
                    close();
                }
});)

フィルターをコピーするだけですか?

if ($('#trips').data('kendoGrid').dataSource.filter())
{
   // if no filters are applied .filter() might return undefined, so to prevent
   // errors lets check if any filters are applied
   var filters = $('#trips').data('kendoGrid').dataSource.filter().filters;
   customDS.filter(filters);
}

次に、トリップ グリッドを進めているように進みます。dataType は json ではないことに注意してください。

ただし、dataSource を使用せずに json として絶対に実行する必要がある場合は、はるかに困難になります。dataSource.filter() 'filters' 配列と 'logic' で構成されるオブジェクトを返します。フィルターの各要素は、「フィールド」、「値」、および「演算子」で構成されるオブジェクトです。現時点でパラメータ「モデル」が空であるのは、「モデル」という名前で定義されたものを送信していないためです。実際には、データは次のようになります。

data: { filters: [somearray], logic: 'somelogic' }

json として渡したい場合は、デシリアライゼーションがその魔法を実行できるように、コントローラーのパラメーターに実際に送信するものを反映する必要があります (またはプレフィックスをバインドできます)。だからそのどちらか

data: {model : filter}

また

 public ActionResult Print(Filters filters, string logic)

Filters は、クライアント側のdataSource.filter().filters配列と同じ 3 つのフィールドを持つクラスです。また、フィールドの 1 つが AFAIR C# 制限キーワードである「operator」であるため、すべてのデータを「filters」からいくつかの「temporaryFilters: {field:'', value:'', _operator:」に移動する必要もあります。 ''}。これは手間がかかりすぎるので、そのソリューションをあきらめて、dataSource のソリューションを使用してください :)

于 2013-04-24T19:38:00.040 に答える