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.