2013-04-28 5 views
1

У меня есть JS-файл, который создает строку JSON, которую я строгу и отправляю с вызовом AJAX на сервер, используя Fiddler. Я вижу, что JSON отформатирован правильно, и мое действие вызывается, когда оно останавливается в точке останова но моя модель имеет только Nulls.MVC Model binding JSON

Вот код JS:

var testString = { id: "1", date: "28/04/2013", sim: "B787", times: "0100", note: "Test note" }; 

    $.ajax({ 
     url: url, 
     type: 'POST', 
     contentType: 'application/json', 
     data: JSON.stringify(testString), 
     success: function (data) { 
     }, 
     error: function (request, status, error) { 
     } 
    }); 

А вот модель:

[Serializable] 
    public class BookingModel 
    { 
    public int Id { get; set; } 
    public DateTime Date { get; set; } 
    public string Sim { get; set; } 
    public string Times { get; set; } 
    public string Note { get; set; } 
    } 

Наконец вот действие, которое называется.

[HttpPost] 
    //[ValidateAntiForgeryToken] 
    public ActionResult Booking(BookingModel BookingModel) 
    { 

     return Json(new { sucess = 0}); 
    } 

И во время отладки BookingModel не показывает ничего, кроме NULL, но как я уже abouve Скрипач показывает строку как:

{"id":"1","date":"28/04/2013","sim":"B787","times":"0100","note":"Test note"} 

Я был на этом в течение 2 дней, и теперь я получаю лысого кто-то, пожалуйста, помогите ... Это сводит меня с ума.

Спасибо.

Утес.

EDIT *

Ok немного больше информации выглядит, как он делает работу, но то, что я должен сделать это на первой контрольной точке, если я ударил F5, чтобы продолжить действие вызывается снова и на этот раз данные имеются и правильны.

Итак, мой вопрос сейчас, так как он работает во второй раунде на сервер, а не на первом?

Thanks

Cliff.

+0

Реальный вопрос: почему браузер делает два запроса? Есть ли у вас какой-то забытый код, который вызывает одно и то же действие, но без отправки каких-либо данных? – StriplingWarrior

+0

Да, я обнаружил, что недостатком является «Return False» в конце функции, чтобы страница была отправлена ​​AJAX, а затем снова через обычную обратную передачу. Итак, теперь это разрешено, и я получаю данные при первом вызове. Однако теперь я обнаружил, что могу получить либо данные, привязанные к моей модели, либо другие поля формы, которые я не хочу связывать, но не оба .... Очень короткие волосы теперь с этим ... –

+0

У вас есть несколько здесь, но самым простым может быть включение данных модели на URL-адрес действия формы и представление данных формы через AJAX.(Вы можете объявить форму с помощью Ajax.Form() вместо HTML.Form()) – StriplingWarrior

ответ

1

Просто случайно наткнулся на этот, пока я искал что-то еще.

Я столкнулся с подобной ситуацией, когда впервые начал использовать MVC, и это была проблема чувствительности к регистру.

В вашем объекте JSON все ваши имена свойств в нижнем регистре, в вашей реальной модели C#, ваши имена свойств капитализируются.

Я собираюсь сделать предположение, что через год вы уже поняли это, но в духе предоставления ответа будущим искателям.

Убедитесь, что имена полей в объекте JSON соответствуют строкам имен свойств в вашей модели подкачки.