带有ASP.NET MVC的Sencha ExtJS 5-通过代理保存模型

带有ASP.NET MVC的Sencha ExtJS 5-通过代理保存模型,asp.net,asp.net-mvc,extjs,extjs4,extjs5,Asp.net,Asp.net Mvc,Extjs,Extjs4,Extjs5,我刚刚开始使用带有ASP.NET Web API的Sencha ExtJS 5 其中一个基本示例是创建模型并将数据发布到“代理” 我的ExtJS代理正在发布到ASP.NET Web API,该API希望Id列中的值为空,以便作为新记录插入到db 问题是ExtJS“create”函数会自动为model id列生成一个字符串id(例如SessionModel-1) 我附上了保存请求有效负载的屏幕截图 Ext.define("SessionModel", { extend: "Ex

我刚刚开始使用带有ASP.NET Web API的Sencha ExtJS 5

其中一个基本示例是创建模型并将数据发布到“代理”

我的ExtJS代理正在发布到ASP.NET Web API,该API希望Id列中的值为空,以便作为新记录插入到db

问题是ExtJS“create”函数会自动为model id列生成一个字符串id(例如SessionModel-1)

我附上了保存请求有效负载的屏幕截图

 Ext.define("SessionModel", {
        extend: "Ext.data.Model",
        fields: [
            { name: 'id', type: 'int' },
            { name: 'title', type: 'string' },
            { name: 'approved', type: 'bool' , defaultValue : false }
        ],

        proxy: {
            type: 'rest',
            url: '/api/Session'

        }

    });

    var mySession1 = Ext.create("SessionModel", {
        title: 'C++',
        approved: true,
    });


  mySession1.save();

Session.cs-模型定义如下:

namespace WebApplication1.Models
{
    public class Session
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public bool Approved { get; set; }
    }
}
SessionController.cs-控制器POST:

 // POST api/Session
[ResponseType(typeof(Session))]
public IHttpActionResult PostSession(Session session)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    db.Sessions.Add(session);
    db.SaveChanges();

    return CreatedAtRoute("DefaultApi", new { id = session.Id }, session);
}
如何阻止ExtJS自动生成id,或者使用“保存”的正确方法是什么?

是的,ExtJS正在填充,因为它们需要它来进行内部操作。如果要在客户端进入服务器之前设置id属性,则应创建自定义代理类并重写。在那里,您可以检查所需操作是否为
create
,并进行相应设置

buildRequest: function(operation) {
    var request = this.callParent(arguments);

    if (request.getAction() === 'create') {
        request.getRecords().forEach(function(record) {
            record.set('carId', ''); //assing desired value 
        });
    }

    return request;
}

这是一个来自Skilltle的好例子。

在检查ModelState之前设置session.Id=0。。。