为什么XML我通过AJAX传递给MVC控制器没有到达那里?

时间:2017-07-22 15:37:04

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

我正在尝试将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字符串转换为Serialized Json,然后再将其发送到服务器,但无济于事。

我非常感谢你知道我做错了什么。

非常感谢。

1 个答案:

答案 0 :(得分:0)

这是因为默认情况下,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");
}