2

グリッドに並べ替えとフィルタリングを追加する必要があります。グリッドはタブパネルの一部です。Firebugで、コントローラーの呼び出しに対する次のパラメーターを確認できます。

_dc 1361741346485
limit   200
page    2
sort    [{"property":"IsLate","direction":"ASC"}]
start   200

リクエストからソートパラメーターを受け入れるには、コントローラーメソッドにどのパラメーターを追加する必要がありますか?私はそれをシリアル化する必要があると思います。プロパティと方向を使用して並べ替えオブジェクトを作成しようとしましたが、デバッグすると、受け取ったパラメータのプロパティと方向がnullになります。従う必要のある命名規則はありますか?よくわかりません。ありがとうございました。

これは私のコードです:
LateGrid.js

  Ext.define('FICMTB.ui.LateModel', {
       extend: 'Ext.data.Model',
       fields: [
    { name: 'Id' },      
    { name: 'IsLate' },      
    { name: 'Comments' },  
    { name: 'Description' }],
    idProperty: 'Id'
 });

 Ext.define("FICMTB.ui.LateGrid", {
     extend: "Ext.grid.Panel",
     requires: [
        'FICMTB.ui.LateModel',
        'Ext.ux.grid.FiltersFeature'
        ],

initComponent: function () {
    var me = this;

    me.columns = me.buildColumns();
    me.filters = {
        ftype: 'filters',
        encode: false, // json encode the filter query
        filters: [{
            options: ['YES', 'NO'],
            dataIndex: 'IsLate'
        }]
    };
    me.features = [me.filters];
    me.store = Ext.create('Ext.data.Store', {
        model: 'FICMTB.ui.LateModel',
        remoteSort: true,
        storeId: 'LateStoreId',
        autoLoad: true,
        buffered: true,
        autoSync: true,

        pageSize: 200,
        proxy: {
            type: 'rest',
            timeout: 600000,

            url: '/Late/Transactions/',
            reader: {
                type: 'json',
                root: 'transactions',
                totalProperty: "Total"
            },
            writer: {
                type: 'json',
                root: 'transactions'
            }
        }
    });

    me.selModel = new Ext.selection.RowModel({
        singleSelect: true
    });

    me.autoSizeColumns = true;

    me.autoScroll = true;
    me.forcefit = true;

    me.callParent(arguments);
},

buildColumns: function () {
    var me = this;

    return [
    { text: 'Id', dataIndex: 'Id', hidden: true, hideable: false },
    { text: 'Is Late' dataIndex: 'IsLate', sortable: true, width: 50, filter:true},      
    { text: 'Comments', dataIndex: 'Comments', width: 250, sortable: true },
    { text: 'Description', dataIndex: 'Description', width: 250, sortable: true }];
  },
  height: 600,
  width: 'auto'
});

LateController.cs

[AcceptVerbs(HttpVerbs.Get)]
[ActionName("LateTransactions")]
public ActionResult GetLateTransactions(string page, string start, string limit, xxxxxx sorting, yyyyy filtering)
{
    // what should xxxxx and yyyyy be? how should I name the sorting and filtering parameters?
    //            returns json 
}

編集:Sortingオブジェクトを使用しようとしましたが、nullとして表示されます

// Sorting 
// NOT Simple Sort: 
// Request:  index?sort=[{"property":"email","direction":"DESC"}, {"property":"last_name","direction":"ASC"}, ...] 
public class Sorting 
{ 
    public string property { set; get; } 
    public string direction { set; get; } 
}

[AcceptVerbs(HttpVerbs.Get)]
[ActionName("LateTransactions")]
public ActionResult GetLateTransactions(string page, string start, string limit, Sorting sort, yyyyy filtering)
{
    ....
}
4

3 に答える 3

0

私はMVC3にまったく精通していませんが、あなたがする必要があるのは次のとおりです。

  • パラメータを正しくマップし(おそらく、そのメソッドの文字列ソートパラメータを使用してこれを行います)、ソート値をJSON文字列として取得するようにします。
  • 次に、JSON文字列をオブジェクトとして逆シリアル化する必要があります(これは役立つと思います:http://msdn.microsoft.com/en-us/library/bb412179.aspx)。
于 2013-02-25T09:56:21.087 に答える
0

MVC3もわかりませんが、Extjsで.NetWCFを使用して成功しました。例えば...

[OperationBehavior(Impersonation = ImpersonationOption.Allowed)]
   [WebInvoke(Method = "GET")]
   public Stream getEvent_list(string TableName, string WhereParams,string page, string start, string limit, string sort)
   {
       string sorting = "date desc";

       if (WhereParams == null) WhereParams = "";
       if (sort != null)
       {
           sorting = getSorting(sort);  // parse the sorting json parameter
       }

blah blah....

       string sql = "select * from mytable order by " + sorting;
        /// return json as streamn

  }

 //  -------------------- getSorting ------------------------------------------------
// Parse the passed sorting JSON object into a string for SQL query.
// for example sort= [{property:'dr'},{order:'desc'},{property:'doi'},{order:'asc'},]
// gets converted to 'dr desc, dor asc' (SQL friendly format).

   private string getSorting(string sort)
   {
       string sorting = "";

       string[] pairs = sort.Split(',');

       for ( int i=0; i< pairs.Length; i +=2 )
       {
           string[] pair = pairs[i].Split(':');
           string[] ord = pairs[i+1].Split(':');

           if (sorting.Length > 0)
           {
               sorting += ",";
           }
           // get rid of all extra json characters.
           sorting += pair[1].Trim(' ', '{', '}', '[', ']', '\\', '\"', '"') + " " + ord[1].Trim(' ', '{', '}', '[', ']', '\\', '\"', '"');
       }

       return sorting;
   }
于 2013-02-25T15:34:12.213 に答える
0

ソートのために、私は実際にjson文字列を取得していました。フィルタのencodeをtrueに設定して、コントローラメソッドに渡されるfiltersパラメータがjson文字列になるようにする必要がありました。

   me.filters = {
       ftype: 'filters',
       **encode: true, // json encode the filter query**
       filters: [{
           options: ['YES', 'NO'],
           dataIndex: 'IsLate'
       }]
   };

DeserializeObjectメソッドを持つNewtonsoftライブラリを使用しています-json文字列を受け取り、それをオブジェクトに変換します。したがって、フィルタリングの場合、私のオブジェクトは次のとおりです。

   public class Filtering
   {
       public string type { get; set; }
       public string value { get; set; }
       public string field { get; set; }
   }

そして私のコントローラーでは:

    [AcceptVerbs(HttpVerbs.Get)]
    [ActionName("LateTransactions")]
    public ActionResult GetLateTransactions(string page, string start, string limit,    Sorting sort, Filtering filter)
    {
    // get all the filters
        List<Filtering> deserzdFilter = JsonConvert.DeserializeObject<List<Filtering>>(filter);
        ....
//            returns json(model);
     }
于 2013-03-07T14:02:38.167 に答える