JsonValueProvider не работает в ASP.NET MVC3 - PullRequest
0 голосов
/ 27 марта 2011

У меня проблемы с привязкой ViewModel к json в MVC3. Мой очень простой код ниже ...

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
  <% using (Html.BeginForm("Save", "Home")) {%>    
    <p>
        Cat
    </p>
    <button id="clickMe" type="submit">Click Me</button>
   <% } %>     

  <script type="text/javascript">
    $(function () {
      $('form').submit(function () {
        var cat = {
          Age: 5,
          Weight: 13.5,
          Name: 'Fluffy'
        };

        $.ajax({
          url: '/home/save',
          type: 'post',
          data: JSON.stringify(cat),
          dataType: 'json',
          contentType: 'application/json; charset=utf-8'
        });

        console.info(JSON.stringify(cat));
      });
    });
  </script>
</asp:Content>

Строка console.info печатается в информационном окне Firebug, поэтому сценарий запускается в нужное время. Ожидаемый JSON также появляется в Firebug ...

Source
{"Age":5,"Weight":13.5,"Name":"Fluffy"}

Однако, когда представленная ниже модель представления входит в метод действия ниже, все ее свойства не устанавливаются ...

public class Cat
{
  public int Age { get; set; }
  public double Weight { get; set; }
  public string Name { get; set; }
}

[HttpPost]
public ActionResult Save(Cat form)
{
  return View();
}

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

Заранее спасибо.

1 Ответ

2 голосов
/ 27 марта 2011

Это должно работать.Только не забудьте отменить отправку формы по умолчанию, вернув false:

$('form').submit(function () {
    var cat = {
        Age: 5,
        Weight: 13.5,
        Name: 'Fluffy'
    };

    $.ajax({
        url: this.href,
        type: this.method,
        data: JSON.stringify(cat),
        dataType: 'json',
        contentType: 'application/json; charset=utf-8'
    });

    return false;
});

Также вы указали dataType: 'json', поэтому убедитесь, что ваши действия контроллера возвращают JSON:

[HttpPost]
public ActionResult Save(Cat form)
{
    return Json(new { message = "success" });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...