无法从javascript访问控制器ActionResult

Unable to reach controller ActionResult from javascript

本文关键字:访问控制 控制器 ActionResult 访问 javascript      更新时间:2023-09-26

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

编辑1 我相当肯定我的问题源于我的模型没有正确设置的属性,但我不知道为什么。我有一个实例,我能够调试,虽然进一步进入代码,但我不知道为什么或如何发生。一旦我找到更多的答案,我会稍后更新。

我有麻烦访问控制器动作从我的ajax调用,它诚实地对我来说没有意义,为什么我无法启动代码。这个问题似乎与CurrentPageNumber有关。当我从c#和javascript中注释掉这个变量时,我能够在控制器中击中断点。但是当我取消这个变量的注释时,我不能碰到断点。我得到的错误是500内部服务器错误。对我来说,这听起来像是JSON键与Controller参数不一样,但正如您在下面看到的那样,情况并非如此(除非我瞎了眼)。知道是什么问题吗?也许我看错方向了?

tl;dr当CurrentPageNumber在参数和键列表中(未注释)时,控制器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":[{"文本":"测试"、"x":50岁"y":50岁"fillColor":"# 77 dd44"、"fontFamily":"天线","fontStyle":"正常","字形大小":"18 pt"、"fontWeight":"正常","textAlignment":"开始","角":0}),:"ImageSource http://localhost: 22223/api/文件/getfile ? = 04. jpg&amp名称;collectionId = 4103,版本= 1,大小=原","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. 
}

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

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

试试这个:

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);
    }
});