在jquery.Ajax上发送特殊字符时出错

时间:2013-03-01 07:11:13

标签: asp.net-mvc-3 jquery

我想知道为什么调用jquery.Ajax并通过参数在数据上发送如下字符串:"Z<Z" = "String<String"崩溃!我和|@##~¬//("·$之类的其他人一起尝试过,但没有问题......

我已经解决了使用encodeUriComponent,但我想知道为什么会崩溃以及是否有另一种方法来解决它。

function getData() {
    var code = "Z<Z"
    return { Id : code };
}

function goAjax(){   
    dataSelected = getData();
    $.ajax({
            url: "/Controller/Action",
            type: "POST",
            data: dataSelected,
            success: function (data, status, xhr) {
                alert("Ok")
            },
            error: function (xhr, status, err) {
                alert('error');
            }
        });
    }

1 个答案:

答案 0 :(得分:2)

那是因为您在服务器上使用ASP.NET,默认情况下不允许您发送此类字符。你可以禁用它。例如,如果您使用的是ASP.NET MVC,则可以使用[ValidateRequest(false)]属性修饰要发布到的控制器操作:

[ValidateRequest(false)]
public ActionResult Action(MyViewModel model)
{
    ...
}

或者,如果您不想为整个操作禁用请求验证,则只能使用[AllowHtml]属性修饰视图模型上的属性:

public class MyViewModel
{
    [AllowHtml]
    public string Id { get; set; }
}

然后:

public ActionResult Action(MyViewModel model)
{
    ...
}

现在,您只能为Id属性发送这些字符。