这是我的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调用中将“data:TheData”替换为“data:JSON.stringify(TheData)”,它会到达C#代码,但D.Id和D.Notes都是null。
如果我将“PostResultType D”替换为“String Id,String Notes”作为PostResult的参数, DataHandler.svc.cs中的所有调用都会引发内部服务器错误。 显然,使用Post的呼叫仅限于一个参数。
是的,使用Get而不是Post会起作用,但最终的目标是使用它来更新数据库,所以我更希望让Post上班。