2014-11-13 2 views
1

Я только начал играть с Sencha ExtJS 5 с помощью ASP.NET Web API.Sencha ExtJS 5 с ASP.NET MVC - Сохранить модель через прокси

Одним из основных примеров является создание модели и размещение данных в «прокси».

http://docs.sencha.com/extjs/5.0/apidocs/#!/api/Ext.data.Model-cfg-proxy

Моего ExtJS прокси размещение на ASP.NET Web API, который ожидает NULL значения в столбце Id упорядоченный для вставки в БД, как новый рекорд.

Проблема заключается в том, что функция «создать» ExtJS автоматически генерирует идентификатор строки (например, SessionModel-1) в столбец идентификатора модели.

Я прилагаю скриншот полезной нагрузки для запроса на сохранение.

enter image description here

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); 
} 

enter image description here Как я могу остановить ExtJS отuto генерирует id или что является правильным способом использования «save»?

+0

set session.Id = 0 перед проверкой ModelState ... –

ответ

0

Да, extjs заселяет idProperty, потому что им это нужно для внутренних вещей. Если вы хотите установить свой идентификатор на стороне клиента перед его выходом на сервер, вы должны создать собственный класс прокси и переопределить buildRequest. Там вы можете проверить, есть ли требуемое действие create и установить idProperty соответственно.

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; 
} 

Вот хороший post about custom proxies от Skirtle.

Смежные вопросы