javascript ajax调用不是没有击中控制器

时间:2015-12-20 11:47:30

标签: javascript c# jquery ajax asp.net-mvc

我正在尝试为Dropzone.js构建一个模拟文件列表。我有一个MVC控制器方法定义如下:

    [HttpPost]
    public async Task<JsonResult> GetImageInfo(int imageId)
    {
        //int imgId;
        //int.TryParse(imageId, out imgId);
        var image = await RepublikDb.PropertyImage.FindAsync(imageId);

        var path = Server.MapPath(image.ImageURI);
        var size = new FileInfo(path).Length;
        var fileName = new FileInfo(path).Name;
        var thumbnailURI = image.ThumbnailImage.ImageURI.TrimStart('~');

        return Json(new { fileName = fileName, size = size, thumbnailURI = thumbnailURI });
    }

我已经使用Postman测试了这个端点,并且一切都按预期工作,但是每次我尝试在JS中获取数据时,服务器都会返回500错误代码,并抱怨以下内容:异常详细信息:< /b>System.ArgumentException:参数字典包含非可空类型'System.Int32'的参数'imageId'的空条目

这是JS AJAX代码: //从剃刀进入JS的入口点。在此处传递逗号分隔的字符串。例如。 imageIds =“10,12,14,16”

EditFormInit("@Model.PropertyImageIds") 

var EditFormInit = function (imageIds) {

var imageIdsArr = imageIds.split(",");
var imageFiles = [];

imageIdsArr.forEach(function (ImageId) {
    var requestData = { imageId: parseInt(ImageId) };

    //var reqUrl = "?imageId=";
    //reqUrl = reqUrl.concat(requestData.imageId.toString());

    $.ajax({
        type: "POST",
        url: "/Admin/PropertyImage/GetImageInfo",
        data: requestData,
        contentType: "text/json; charset=utf-8",
        dataType: "json",
        success: function (data, status, jqXHR) {
            var image = { fileName: data.fileName, size: data.size, thumbnail: data.thumbnailURI }
            imageFiles.push(image);
        }
    });
});

2 个答案:

答案 0 :(得分:0)

尝试:

contentType: "application/json"

这应该有效

答案 1 :(得分:0)

所以我终于意识到为什么控制器没有被击中,并解决了这个问题。 $ .ajax正在向控制器传递一个JSON请求,这显然是失败的。一旦我删除了有问题的行,控制器断点终于被击中了。

$.ajax({
   type: "POST",
   url: "/Admin/PropertyImage/GetImageInfo",
   data: requestData,
   success: function (data, status, jqXHR) {
      var image = { fileName: data.fileName, size: data.size, thumbnail: data.thumbnailURI }
      imageFiles.push(image);
   }}
);

即使控制器的响应现在回来了,imageFiles数组仍然是null。我在这里做错了什么?