2011-03-27 62 views
0

我在MVC3中将ViewModel绑定到json时遇到了问题。我非常简单的代码如下...JsonValueProvider在ASP.NET 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也显示在萤火...

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在应用程序启动时在工厂中注册。我敢肯定,我在这里错过了一些令人难以置信的简单的东西,任何人都可以对此有所了解?

在此先感谢。

回答

2

这应该工作。只是不要忘了取消默认的形式通过返回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" }); 
} 
+0

这就是它!我错过了“返回假”;在我的js结尾。感谢关于从动作返回JSON的提示。 – 2011-03-27 14:36:57