ASP MVC区域和JSON POST

时间:2018-04-17 08:40:38

标签: json asp.net-mvc

我有一个包含区域的项目,并希望将视图模型作为JSON发布到控制器方法。

这就是我所拥有的,在默认区域中生成性能并将其传递到区域SeatSelection中的视图:

$("#addToCartButton").click(function () {
    var json = @Html.Raw(Json.Encode(performance));
    $.ajax({
        url: 'https://@(Request.Url.Host)/SeatSelection/Home/AddToCart',
        type: 'POST',
        dataType: 'json',
        data: json,
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            alert(data);
        }
    });
});

测试的动作方法:

[System.Web.Http.Route("SeatSelection_AddToCart")]        
[System.Web.Http.HttpPost]
public JsonResult AddToCart(PerformanceViewModel performance)
{
    return Json(performance.Name);
}

我创建了以下路线:

context.MapRoute(
    "SeatSelection_AddToCart",
    "SeatSelection/Home/AddToCart",
    new { action = "AddToCart", controller = "Home", id = UrlParameter.Optional },
    namespaces: new string[] { "myProject.Areas.SeatSelection.Controllers" }
);

但我得到的只是内部服务器错误500.我还尝试使用[FromBody]并为方法设置断点,但不会调用它。我无法弄清楚错误或缺失的地方,请帮忙。

UPDATE 这是json / performance:

PerformanceID=00000000-0000-0000-0000-000000000000&Name=Performance+15&StartDate=%2FDate(1360364400000)%2F&EndDate=%2FDate(1500328800000)%2F&LatestDateBookable=%2FDate(1450911600000)%2F&Organizer=Organizer+15&Location=Location+15&Availability=75&IsFull=false&IsBookable=true&HasPrice=true&BookableSeats=11&BookedSeats=94&Description=Description+of+Performance+15&Price=443

我发现了一个错误:"无效的json原语:performanceid"

2 个答案:

答案 0 :(得分:2)

首先,我建议您使用@Url.Action辅助方法,而不是像这样生成网址:https://@(Request.Url.Host)/SeatSelection/Home/AddToCart

其次,始终验证来自浏览器的params。 return Json(performance.Name)看起来很可疑。什么是performance将为空?这可能是您的内部服务器错误500的问题。

如果这不是问题,那么尝试将字符串而不是JSON发送到服务器,并在服务器端验证和解析JSON。

答案 1 :(得分:0)

您可以像这样使用Url.Action方法。我想SeatSelection是项目中的一个区域。

$.ajax({
    url: '@Url.Action("AddToCart", "Home", new { Area = "SeatSelection"})',