在 ExtJs 6.0 中使用 Rest 代理无法获得正确的 Id 以放入 Httl URL

问题描述 投票:0回答:1

我的模型

Ext.define('Movie.model.MovieModel', {
    extend: 'Movie.model.Base',

    fields: [
        { name: 'Movie_id', type: 'int' },
        { name: 'Movie_name', type: 'string' },
        { name: 'Movie_details', type: 'string' },
        { name: 'Movie_release', type: 'string'},
        { name: 'Movie_url', type: 'string' },
        { name: 'Movie_price', type: 'int' },
        { name: 'Rent_day', type: 'string' }
    ]
});

带有 URL 的我的商店

Ext.define('Movie.store.MovieStore', {
    extend: 'Ext.data.Store',
    alias: 'store.movie',
    storeId: 'movieStore',
    model: 'Movie.model.MovieModel',
    Fields: ['Movie_id', 'Movie_name', 'Movie_details', 'Movie_release', 'Movie_url', 'Movie_price'],
    proxy: {
        type: 'rest',
       url:'/api/Movies',
      disableCaching: true,
       useDefaultXhrHeader: false,
        api: {
          create: 'https://localhost:44369/Movies/AddMovie',
            read: 'https://localhost:44369/Movies/GetMovie',
            update: 'https://localhost:44369/Movies/EditMovie',
            destroy: 'https://localhost:44369/Movies/DeleteMovie'
        },
        reader:{
          type:'json',
          headers: { 'Accept': 'application/json' }            
      },
        writer: {
            type: 'json',
            writeAllFields: false,
           
        }
        
    }, autoLoad: true

});

控制器删除记录

 var data = store.findRecord('Movie_name', name);
                var id = data.get('Movie_id');
            store.remove(store.findRecord('Movie_id',id,0,false,false,false));
            store.sync();

在我的网络 API 中

  [Route("Movies/DeleteMovie/{id}")]
        [EnableCors("*", "*", "*")]
        [System.Web.Http.AcceptVerbs("Delete", "Post","Get")]
        [System.Web.Http.HttpDelete]

   
        public IHttpActionResult DeleteMovie(int id)

        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            Movie movie = db.Movie.Find(id);
           

            db.Movie.Remove(movie);
            db.SaveChanges();

            return Ok(movie);
        }

错误

但是所有的方法都不管用。我在我的

console.log
中遇到这些错误:

$id
:1
消息:请求无效
Message Detail:参数字典包含
id
中方法
System.Int32
的不可空类型
System.Web.Http.IHttpActionResult DeleteMovie(Int32)
的参数
MovieRentals.Controllers.MoviesController
的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。

extjs发送请求的URL是

https://localhost:44369/Movies/DeleteMovie/MovieModel-75?_dc=1682656495712
而不是
https://localhost:44369/Movies/DeleteMovie/123

api rest web extjs proxy
1个回答
0
投票

默认情况下,Ext JS 使用名为

id
的字段作为模型实例的唯一标识符。由于模型中标识符的调用方式不同 (
Movie_id
),ExtJS 将为每个模型添加一个自动生成的标识符(例如
MovieModel-75
)并在 REST 请求中传递它。这与用于向在客户端创建但在服务器上还没有标识符的幻像记录添加标识符的机制相同。

您可以轻松设置自定义 id 属性以用于您的模型。这样你告诉 Ext JS 不是使用

id
而是一个不同的领域。

只需将其添加到模型定义中:

Ext.define('Movie.model.MovieModel', {
    extend: 'Movie.model.Base',
    idProperty: 'Movie_id',
    ...
});
© www.soinside.com 2019 - 2024. All rights reserved.