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 呼び出しで「data: TheData」を「data: JSON.stringify(TheData)」に置き換えると、C# コードに到達しますが、D.Id と D.Notes は両方とも null です。

PostResult のパラメーターとして "PostResultType D" を "String Id, String Notes" に置き換えると、DataHandler.svc.cs のすべての呼び出しで内部サーバー エラーが発生し始めます。どうやら、Post を使用した呼び出しは 1 つのパラメーターに制限されています。

はい、Post の代わりに Get を使用しても機能しますが、最終的な目標はこれを使用してデータベースを更新することなので、Post を機能させることをお勧めします。

4

0 に答える 0