无法从javascript到达控制器ActionResult

时间:2016-10-28 09:18:36

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

编辑2 我能够解决问题。 Javascript或Controller代码没有任何问题。问题来自.dll文件。在控制器方法中,我从TextModel对象构建一个新的TextInfo对象。 TextInfo对象来自一个从API构建的.dll。但是,这个.dll在文件系统中有多个具有不同构建日期的实例。似乎旧版本没有被正确删除,但它是编译器使用的版本。这创建了500内部服务器错误,告诉我方法不可用。

编辑1 我很确定我的问题源于我的模型中的属性未正确设置但我不确定为什么。我有一个实例,我可以调试代码,但我不知道为什么或如何发生。我会在找到更多答案后稍后更新。

我无法从我的ajax调用中访问控制器操作,对我来说,为什么我无法启动代码真的没有意义。问题似乎与CurrentPageNumber有关。当我从c#和javascript中注释掉这个变量时,我能够在控制器中点击断点。但是,当我取消注释该变量时,我无法击中断点。我得到的错误是500内部服务器错误。对我来说,听起来像JSON键与Controller参数不同,但正如你在下面看到的那样情况并非如此(除非我转为盲目)。知道问题可能是什么?或许我正朝错误的方向看?

tl; dr当ActionPageNumber在参数和键列表中时(未注释),控制器ActionResult未启动,但是当它没有(注释掉)时它会启动。

我正在尝试联系以下ActionResult。

public ActionResult SavePageInfo(List<TextModel> TextObjects, string ImageSource, int CurrentPageNumber)

我是在以下AJAX调用

的帮助下完成的
var json = JSON.stringify({ TextObjects: textObjects, ImageSource: imageSource, CurrentPageNumber: pageNumber });

$.ajax({
    url: "/NextprintPhotobook/SavePageInfo",
    type: "POST",
    data: json,
    dataType: "json",
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        console.log(data.message);
        alert(data.message);
    }
})

生成的JSON看起来像这样(因为您可以看到所有值都已设置):

  

“{” TextObjects “:[{” 文本 “:” 测试 “ ”ד:50, ”Y“:50, ”填充颜色“: ”#77DD44“, ”fontFamily中“: ”Arial字体“,” fontStyle “:” 正常”, “fontSize的”: “18pt”, “fontWeight设置”: “正常”, “textAlignment”: “启动”, “角度”:0}],   “ImageSource的”: “http://localhost:22223/api/file/getfile?name=04.jpg&collectionId=4103&version=1&size=original”,   “CurrentPageNumber”:1}“

TextModel如下:

public class TextModel
{
    public string text
    {
        get; set;
    }
    public int x
    {
        get; set;
    }
    public int y
    {
        get; set;
    }
    // Same properties as in the JSON. 
}

2 个答案:

答案 0 :(得分:1)

为什么不使用单个对象作为参数(所有这些参数的包装类)? (通常这是它的完成方式,除非你想在查询字符串中添加一些参数)

答案 1 :(得分:0)

这不是答案......好吧(我只想把它放在这里,这样更容易阅读)

试试这个:

var data = {
    TextObjects: JSON.stringify(textObjects),
    ImageSource: imageSource
    CurrentPageNumber: pageNumber
}

$.ajax({
    url: "/NextprintPhotobook/SavePageInfo",
    type: "POST",
    data: data,
    dataType: "json",
    contentType: 'application/json; charset=utf-8',
    success: function (res) {
        console.log(res.message);
        alert(res.message);
    }
});