MVC发布数据和返回json数据

时间:2014-03-18 07:23:22

标签: c# jquery asp.net-mvc-4

我有像这样的控制

public JsonResult GetSizes(long Id)
    {
        try
        {
            //get some data and filter y Id

        }
        catch (Exception ex) {  }
        return Json(//data);
    }

我需要通过ajax请求跟随json

var sizes = [];
$.ajax({
    type: 'POST',
    async: false,
    data: { 'Id': selectedId },
    url: "/<Controler name>/GetSizes",
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    error: function (xhr) {
        alert('Error: ' + xhr.statusText);
        return false;
    },
    success: function (result) {
        if (result.Result != null) {
            if (result.Result.length > 0) {
                sizes = result;
            }
        }
    }
});

但是这给了我一个服务器错误。我该如何解决这个问题。

3 个答案:

答案 0 :(得分:2)

替换你的

url: "/<Controler name>/GetSizes",

通过

url: "@Url.Action("GetSizes", "Controller_Name"),

你是Ajax必须

吗?
async: false?


然后尝试将此作为您的行动

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult GetSizes(long Id)
{
    try
    {
        //get some data and filter y Id

    }
    catch (Exception ex) {  }
    return Json(//data);
}

此外,尝试在您的操作上设置一个断点,并在调试模式下查看您的Ajax是否达到了您的操作。

答案 1 :(得分:0)

这个我的演示,你也可以这样做:

$.ajax({
                        url: '@Url.Action("CheckCity", "BookingStarts")',
                        data: { packageId: packageid, cityId: valuecities[valuecities.length - 1] },
                        type: 'POST',
                        dataType: 'json',
                        success:
                            function(result) {
                                if (result.Status == true) {
                                    $('#CheckoutDateHotel_@item.CityId').val(result.Date);
                                }
                            }
                    });
控制器中的

 [AcceptVerbs(HttpVerbs.Post)]

public ActionResult CheckCity(int packageId,int cityId) {

var packageCityModel = PackageDetails.GetPackageCitiesByPackageId(packageId).OfType<HMSService.PackageCity>();
var package = new PackageReservationMasterDal();
var itemPackage = package.GetPackageDetailByPackageId(packageId);
var result = "";
var city = packageCityModel.FirstOrDefault(x => x.CityId == cityId);
if (city != null)
{
    result = itemPackage.TravelDateFrom.AddDays(city.NoOfNights).ToShortDateString();
}
return Json(new { Status = true, Date = result });

}

答案 2 :(得分:0)

此处的问题是您没有字符串化您的数据传输对象(DTO)。
一种更清洁的方法就是这样。

<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/json3/3.3.0/json3.js"></script>
<script type="text/javascript">
    var sizes = [];
    var DTO = { 'Id': selectedId };
    $.ajax({
        type: 'POST',
        async: false,
        data: JSON.stringify(DTO),
        url: "@Url.Action("GetSizes", "Home")",
        dataType: 'json',
        contentType: 'application/json'
    }).done(function(result) {
        if (result.Result != null) {
            if (result.Result.length > 0) {
                sizes = result;
            }
        }
    }).fail(function(xhr) {
            alert('Error: ' + xhr.statusText);
            return false;
    });
</script>

请注意

的使用
  1. JS​​ON.stringify
  2. @ Url.Action helper
  3. jqXHR.done(function(data,textStatus,jqXHR){});
  4. jqXHR.fail(function(jqXHR,textStatus,errorThrown){});
  5. 你也在使用async=false我想在退出函数之前抓住所有sizesjQuery.deferred将是一本有趣的读物。