MVC3(Razor)Json在Controller中获取反序列化数据

时间:2012-06-04 18:14:26

标签: asp.net-mvc json razor stringify jsonserializer

我需要再次使用Asp.Net MVC(Razor View Engine)。 在我的观点(索引)中我有

@model IEnumerable<Movie>

我想将模型传递给Controller:我以这种方式对模型进行字符串化:

<script type="text/javascript">
function postData(){
var urlact='@Url.Action("createDoc")';
var model ='@Html.Raw(Json.Encode(Model));

$.ajax({
    data: JSON.stringify(model),
    type:"POST",
    url:urlact, 
    datatype:"json",
    contentType:"application/json; charset=utf-8"
});
}
</script>

一切似乎都有效,因为我知道字符串化的数据是:

'[{"ID":1,"Title":"The Lord of the Rings: The Fellowship of the Ring","ReleaseDate":"\/Date(1007938800000)\/","Genre":"Fantasy","Price":93000000.00},{"ID":2,"Title":"The Lord of the Rings: The Two Towers","ReleaseDate":"\/Date(1039042800000)\/","Genre":"Fantasy","Price":94000000.00},{"ID":3,"Title":"The Lord of the Rings: The Return of the King","ReleaseDate":"\/Date(1070233200000)\/","Genre":"Fantasy","Price":94000000.00}]';

问题是:在Controller中,methodName “createDoc”(如脚本中所声明的)我无法访问字符串化数据。 在网上建立一些样本之后,我的方法是这样的:

[HttpPost]
    public ActionResult createDoc(IEnumerable<Movie> movies)
    {
        //...using movies list
        return View();
    }

为什么我无法访问字符串化数据?我该怎么做,是否有一些方法可以调用在Controller方法中反序列化模型? 另外,我可以使用serialize()方法而不是stringify()方法吗?如果是这样,那么语法是什么,View&amp;控制器方?

谢谢。

1 个答案:

答案 0 :(得分:3)

您已经在JavaScript变量model中获得了字符串化数据。您只需要在非字符串的对象上调用JSON.stringify

如果您想在不修改model的情况下将数据发布到您的操作,只需在没有model的情况下传递JSON.stringify,并且ModelBinder会将其反序列化为IEnumerable<Movie>为了你。

如果您想将model用作字符串以外的其他内容,则需要在字符串上调用JSON.parse。换句话说:

var model = JSON.parse('@Html.Raw(Json.Encode(Model))');

然后,您需要保留JSON.stringify电话。

最后,stringify是特定于浏览器的对象JSON上的方法,而serialize是ASP.NET MVC特定的Json对象上的方法。两个不同的世界,同名。