【问题标题】:Why is XML I'm passing via AJAX to an MVC controller not getting there?为什么我通过 AJAX 传递给 MVC 控制器的 XML 没有到达那里?
【发布时间】:2023-04-04 15:11:01
【问题描述】:

我正在尝试将 XML 字符串从 HTML/JavaScript 客户端传递到 ASP.NET MVC 服务器端。问题是 XML 字符串永远不会到达服务器,而普通的“非 XML”字符串会成功传输。

客户端相关的JavaScript代码如下:

function TransferXmlDataToServer() {
    var sXml = "<Tag>This is an XML test string.</Tag>"
    $.ajax({
        type: "POST",
        url: '@Url.Action("TransferXMLData", "Home")',
        data: { sInputXml: sXml },                             
        dataType: "json",
        success: function(sReturnValue) {
            alert("Value returned from server is: " + sReturnValue);
        },
        error: function() {
            alert("There was an error on the server side");
        }
    })
};

这是服务端MVC Home控制器中对应的函数:

public JsonResult TransferXMLData(string sInputXml) {
    // The arguments' name must match those used in the View's Ajax call
    return Json("Success");
}

从客户端调用TransferXmlDataToServer 时,会显示服务器端出现错误 消息。我在服务端的TransferXMLData中放了一些没有被调用的调试打印语句,显示这个函数甚至没有进入。

另一方面,当

sXml = "<Tag>This is an XML test string.</Tag>"

被替换为

sXml = "This is a test string."

一切都按预期进行。

补充说明:

  • 已在 IE11 和 Edge 上尝试过。
  • 我尝试在将 XML 字符串发送到服务器之前将其转换为序列化 Json,但无济于事。

如果知道我做错了什么,我将不胜感激。

非常感谢。

【问题讨论】:

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


    【解决方案1】:

    这是因为默认情况下,asp.net 会防止看起来像 HTML 标记的内容被发送到未编码的控制器操作。您需要使用ValidateInputAttribute 来装饰您的操作以让内容通过:

    [ValidateInput(false)]
    public JsonResult TransferXMLData(string sInputXml) 
    {
        // The arguments' name must match those used in the View's Ajax call
        return Json("Success");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多