hi all
i am new on extjs . i have a problem on ext.direct for asp.net mvc 3
here is my codes:
thos is my model:
Code:
Ext.define('Crm.model.Storage', {
extend: 'Ext.data.Model',
idProperty: 'Id',
fields: [
{ name: 'Id', type: 'int' },
{ name: 'CustomCode', type: 'string' },
{ name: 'Name', type: 'string' },
{ name: 'IsDefault', type: 'boolean' }
]
});
this is my store :
Code:
Ext.define('Crm.store.Storages', {
extend: 'Ext.data.Store',
model: 'Crm.model.Storage',
pageSize: 10,
autoLoad: true,
autoSync: false,
autoDestroy: true,
proxy: {
type: 'direct',
//directFn: Storage.List,
paramOrder: 'start|limit',
api: {
create: Storage.New,
read: Storage.List,
update: Storage.Update,
destroy: Storage.DeleteStorage
},
reader: {
type: 'json',
root: 'data'
},
writer: {
type: 'json',
root: 'data',
encode: true,
writeAllFields: true
}
}
});
this is my app :
Code:
Ext.Loader.setConfig({
enabled: true,
paths: { 'Crm': '/app' }
});
Ext.require([
'Crm.model.Storage',
'Crm.store.Storages',
'Crm.view.StorageGrid',
'Crm.view.StorageForm',
'Ext.ux.plugins.FitToParent'
]);
Ext.direct.Manager.addProvider(Ext.app.REMOTING_API);
Ext.application({
name: 'Crm',
models: ['Storage'],
stores: ['Storages'],
launch: function () {
var newAction = Ext.create('Ext.Action', {
text: 'انبار جدید',
disabled: false,
handler: function (widget, event) {
var record = Ext.create('Crm.model.Storage');
gridStorages.store.insert(0, record);
}
});
var deleteAction = Ext.create('Ext.Action', {
text: 'حذف انبار',
disabled: true,
handler: function (widget, event) {
var sm = gridStorages.getSelectionModel();
gridStorages.store.remove(sm.getSelection()[0]);
gridStorages.store.sync();
}
});
var formStorage = Ext.create('Crm.view.StorageForm', {
columnWidth: 0.30,
width: 350,
height: 550
});
var gridStorages = Ext.create('Crm.view.StorageGrid', {
columnWidth: 0.70,
autoHeight: true,
height: 550,
tbar: ['->', newAction, deleteAction],
listeners: {
selectionchange: function (model, records) {
if (records[0]) {
formStorage.loadRecord(records[0]);
deleteAction.enable(true);
}
}
}
});
var panelStorages = Ext.create('Ext.panel.Panel', {
title: 'مدیریت انبارها',
plugins: ['fittoparent'],
layout: {
type: 'column'
},
items: [gridStorages, formStorage],
renderTo: 'gridCt'
});
}
});
and finally it is my controller in asp.net mvc :
Code:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using CrmMvc.Models;
using DataAccess;
using Ext.Direct.Mvc;
using Model;
using Newtonsoft.Json;
using Service;
using StructureMap;
namespace CrmMvc.Controllers
{
public class StorageController : DirectController
{
private readonly Context _db = new Context();
public ActionResult List(int start, int limit)
{
var total = _db.Storages.Count();
var storages = _db.Storages.OrderBy(s => s.Id).ThenBy(s => s.CustomCode).Skip(start).Take(limit).ToList();
return Json(new
{
total = total,
data = storages
}, "json", Encoding.UTF8, JsonRequestBehavior.AllowGet, new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
}
[FormHandler]
[ActionName("SaveStorage")] // Action alias
public ActionResult SaveStorage(Storage storage)
{
string msg = String.Empty;
if (storage.Id == 0)
{
_db.Entry(storage).State = EntityState.Added;
msg = "Saved.";
}
else
{
_db.Entry(storage).State = EntityState.Modified;
msg = "Updated.";
}
_db.SaveChanges();
return Json(new
{
success = true,
data = storage,
message = msg
});
}
[ActionName("DeleteStorage")]
public DirectResult DeleteStorage(int id)
{
string msg = String.Empty;
Storage storage = _db.Storages.Find(id);
_db.Storages.Remove(storage);
_db.SaveChanges();
msg = "Deleted.";
return Json(new
{
success = true,
data = id,
message = msg
});
}
protected override void Dispose(bool disposing)
{
_db.Dispose();
base.Dispose(disposing);
}
}
}
the grid is loading all storages but when the user selects one row on grid then press delete button on grid toolbar this exception raised :
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'Ext.Direct.Mvc.DirectResult DeleteStorage(Int32)' in 'CrmMvc.Controllers.StorageController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters.
what can i do?
thnaks for your helps.