This is handy and quite easy to handle server side, as the writer object injects a hidden form element (id='xaction') into the DOM.
string action = Request.Form["xaction"]; if ( !string.IsNullOrEmpty( action ) ) { switch ( action ) { case "create": CreatCategory(); break; case "update": UpdateCategory(); break; case "destroy": DeleteCategory(); break; default: ListCategory(); break; } }
However, on another page I didn't want to submit a request per edit or per row edit, but wanted to submit a request in bulk. So how did I go about that?
Firstly, I removed the writer object from the store object as below...
var mcStore = new Ext.data.Store({ id: 'dsMthCategories', proxy: mcProxy, reader: mcReader, baseParams: { xaction: "LISTING" }, // *** take note //writer: mcWriter, // <-- remove the Writer object listeners: { 'beforeload': function(store, options) { options.params['mthId'] = mthid; } } });Next I added the following in the handler of the Update button...
var data = []; Ext.each(mcGrid.getStore().getModifiedRecords(), function(record) { data.push(record.data); }); $.ajax({ type: "POST", url: 'Data/MthCategories.aspx?xaction=batchupdate', // *** take note data: JSON.stringify(data), contentType: "application/json;", dataType: "json", success: function(msg) { mcGrid.store.load(); }, error: function(msg) { alert('An error occured during the update.'); } });
Two things to note about the above code is that the default action of the store is to add the value "LISTING" to the injected xaction form element and in the jquery ajax function call I've added xaction to the querystring.
This enables the ability to utilise the HttpRequest.Params property, which picks up both Form and QueryString items.
string action = Request.Params["xaction"]; if ( !string.IsNullOrEmpty( action ) ) { switch ( action ) { case "batchupdate": BatchUpdate(); break; default: ListMonthCategories(); break; } }
And there you have it.
Enjoy!
No comments:
Post a Comment