JsonValueProvider在ASP.NET MVC3中不起作用 [英] JsonValueProvider not working in ASP.NET MVC3

查看:120
本文介绍了JsonValueProvider在ASP.NET MVC3中不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在将ViewModel绑定到MVC3中的json时遇到麻烦.我的非常简单的代码如下...

I'm having trouble binding a ViewModel to json in MVC3. My very simple code is below...

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

在Firebug信息窗口中打印console.info行,因此脚本在正确的时间触发.预期的JSON也显示在Firebug中...

The console.info line is printed in the Firebug info window so the script is firing off at the correct time. The expected JSON also shows up in Firebug...

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

但是,当下面的视图模型进入action方法时,下面的所有属性都未设置...

However, when the viewmodel below comes into the action method below all of its properties are unset...

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已在工厂中注册.我确定我在这里缺少了难以置信的简单事物,任何人都可以对此有所了解吗?

I've verified that the JsonValueProviderFactory is registered in the factories when the app starts. I'm sure I'm missing something unbelievably simple here, can anyone shed any light on this?

谢谢.

推荐答案

这应该有效.只是不要忘记通过返回false来取消默认的表单提交:

This should work. Just don't forget to cancel the default form submit by returning 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:

Also you have specified dataType: 'json' so make sure that your controller actions returns JSON:

[HttpPost]
public ActionResult Save(Cat form)
{
    return Json(new { message = "success" });
}

这篇关于JsonValueProvider在ASP.NET MVC3中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆