JQuery $ .getJSON在请求URL中附加一个问号

Dav*_*ale 3 asp.net-mvc jquery json http

我在ASP.NET MVC Web应用程序上有以下JSON请求代码:

var userID = 'id=' + $('#namesList').val();
        $.getJSON('/Person/GetPerson/', userID, function(data) {
            $('#collar').text(data.collarNumber);
            $('#name').text(data.Name);
            $('#email').text(data.EmailAddress);
        });
Run Code Online (Sandbox Code Playgroud)

这会创建一个请求,例如:http:// localhost:48610/Person/GetPerson /?id = 6.为什么那里有问号?我得到服务器错误参数字典包含非可空类型'System.Int32'的参数'id'的空条目....

如果我手动提出请求没有问号,它可以正常工作.

sal*_*iza 5

根据定义,URL中的参数在"?"之后.在MVC中,路由参数实际上不是参数(对于Web浏览器),而是路径的一部分.因此,正确的代码将是:

    var userID = $('#namesList').val();
    $.getJSON('/Person/GetPerson/' + userID, null, function(data) {
        $('#collar').text(data.collarNumber);
        $('#name').text(data.Name);
        $('#email').text(data.EmailAddress);
    });
Run Code Online (Sandbox Code Playgroud)

当控制器实际接受不在MVC路由中的额外值时,将null替换为参数列表.例如,您的控制器可能是:

    public function GetPerson(string id, string type) {
         // your code
    }
Run Code Online (Sandbox Code Playgroud)

你会这样称呼它:

    var userID = $('#namesList').val();
    var params = "type=XXX";
    $.getJSON('/Person/GetPerson/' + userID, params, function(data) {
        $('#collar').text(data.collarNumber);
        $('#name').text(data.Name);
        $('#email').text(data.EmailAddress);
    });
Run Code Online (Sandbox Code Playgroud)