0

这是我的 CSHTML 文件中的 AJAX 调用:

var personId = "Somebody";
var personNotes = "E, F Sharp, A Flat";

var TheData = { "D": { "Id": personId, "Notes": personNotes} };

$.ajax({
    type: "POST",
    url: "/DataHandler.svc/PostResult",
    data: TheData,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        $(ValidationErrorDiv).html("It works");
    },
    error: function (HelpRequest, ErrorCode, TheError) {
        $(ValidationErrorDiv).html("It doesn't work - " + TheError);
    }
});

这是 DataHandler.svc.cs 中的内容:

public class PostResultType
{
    public String Id;
    public String Notes;
}

// in the interface:

{   
  [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json)]
  int PostResult(PostResultType D);
}

// in the class:

public int PostResult(PostResultType D)
{
    return 1;
}

如果按原样调用,Ajax 调用将返回内部服务器错误,而无需访问 C# 代码。

如果我在 Ajax 调用中将“数据:TheData”替换为“数据:JSON.stringify(TheData)”,它会到达 C# 代码,但 D.Id 和 D.Notes 都是空的。

如果我将“PostResultType D”替换为“String Id, String Notes”作为 PostResult 的参数,DataHandler.svc.cs 中的所有调用都会开始引发内部服务器错误。显然,使用 Post 的调用仅限于一个参数。

是的,使用 Get 而不是 Post 会起作用,但最终目标是使用它来更新数据库,所以我更愿意让 Post 工作。

4

0 回答 0