ASP.NET MVC将json数组作为常规发布请求提交给控制器(nonajax)

时间:2010-04-24 03:21:13

标签: javascript asp.net-mvc json post

我在网上找到的所有json示例都只显示了如何使用jquery命令$ .ajax()提交json数组。我将自定义用户控件中的一些数据作为json数组提交。我想知道是否可以将json数组作为常规发布请求提交给服务器(如普通表单),以便浏览器呈现返回的页面。

控制器:

[JsonFilter(Param = "record", JsonDataType = typeof(TitleViewModel))]
public ActionResult SaveTitle(TitleViewModel record)
{
    // save the title.
    return RedirectToAction("Index", new { titleId = tid });
}

使用Javascript:

function SaveTitle() {
    var titledata = GetData();

    $.ajax({
        url: "/Listing/SaveTitle",
        type: "POST",
        data: titledata,
        contentType: "application/json; charset=utf-8",
     });

}

从保存按钮调用。一切正常,但浏览器在提交后仍保留在页面上。我正在考虑从服务器返回某种自定义xml并进行javascript重定向,但它似乎是一种非常hacky的做事方式。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

这是一个老问题,但这可能对找到它的人有用 -

您可以从网页

返回带有新titleId的JsonResult
public ActionResult SaveTitle(TitleViewModel record) {
     string tId = //save the title 
     return Json(tId)
}

然后在你的ajax请求中添加一个成功函数:

function SaveTitle() {
    var titledata = GetData();

    $.ajax({
        url: "/Listing/SaveTitle",
        type: "POST",
        data: titledata,
        contentType: "application/json; charset=utf-8",
        success: function(data) { window.location = "/Listing/Index?titleId=" + data; }
     });

}

这会在成功的ajax请求后重定向页面。 我刚刚看到你在帖子的最后提到了这一点,但我认为这是解决问题的一种简单快捷的方法。

答案 1 :(得分:0)

Phil Haack有nice post discussing this scenario并显示自定义值提供程序的使用情况,而不是动作过滤器。

答案 2 :(得分:0)

我不明白为什么如果你想要整篇文章发帖,你想发帖Json。为什么不从Html表单元素中发布正常的表单变量?