2011-03-27 61 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