【问题标题】:Unable to reach controller ActionResult from javascript无法从 javascript 访问控制器 ActionResult
【发布时间】:2016-10-28 09:18:35
【问题描述】:

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

编辑 1 我相当肯定我的问题源于我的模型中的一个属性没有正确设置,但我不知道为什么。我有 1 个实例,我可以在其中进一步调试代码,但我不知道为什么或如何发生这种情况。等我找到更多答案后会更新。

我无法从我的 ajax 调用访问控制器操作,老实说,我无法启动代码的原因对我来说毫无意义。问题似乎出在 CurrentPageNumber 上。当我从 c# 和 javascript 中注释掉这个变量时,我能够在控制器中命中断点。但是当我取消注释该变量时,我无法达到断点。我得到的错误是 500 Internal Server Error。对我来说,这听起来像 JSON 键与控制器参数不同,但正如您在下面看到的那样,情况并非如此(除非我失明了)。知道问题可能是什么吗?可能我看错了方向?

tl;当 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":[{"text":"Test","x":50,"y":50,"fillColor":"#77DD44","fontFamily":"arial","fontStyle ":"normal","fontSize":"18pt","fontWeight":"normal","textAlignment":"start","angle":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. 
}

【问题讨论】:

  • 感觉它可能与 mvc 和映射到您的列表参数有关...它们需要被索引苏打水说话...尝试调查这个...我可能是错的... . mvc 将前缀名称添加到具有索引的列表中,以便它知道如何映射到列表..
  • 您确定您的网址正确吗?尝试在开始的 NextprintPhotobook/SavePageInfo 中使用“/”
  • 使用@Html.ActionLink() 代替文本网址。
  • @Seabizkit tl;dr 说如果 CurrentPageNumber 被注释掉,代码就可以工作。这不是告诉我们列表的索引是正确完成的吗?
  • 网址正确。如文中所述,我已经能够在控制器功能中点击第一行。

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


【解决方案1】:

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

【讨论】:

  • 不允许其他人将此标记下来。因为我想保持中立,但这如何解决或帮助他的问题
【解决方案2】:

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

试试这个:

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

【讨论】:

  • 我唯一的问题是我确定 JSON.stringify(textObjects) 不会采用 MVC 控制器自动映射格式的集合
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
相关资源
最近更新 更多