1

JavaScript 関数が MVC 4 コントローラーを呼び出していますが、パラメーターは常に null です。これは一般的な問題のようで、調査したいくつかのことを試しましたが、何も機能していません。なぜそれが常にnullなのか、何か考えはありますか?

私の JavaScript GetEntries() 関数は、値を示すアラートを正しく作成します。

function GetEntries(firstLetter) {
    alert(firstLetter);
    $.post('/Home/GetEntries',
           firstLetter,
           EntriesReceived());
}

コントローラー メソッドのブレークポイントがヒットします。

public void GetEntries(string firstLetter)
{
    Debug.WriteLine(firstLetter);
}

ただし、firstLetter は常に null です。どうすればいいのかわからない。

失敗した試行:

JSON.stringifyを使って投稿してみました。

function GetEntries(firstLetter) {
    alert(firstLetter);
    var firstLetterAsJson = JSON.stringify(firstLetter);
    $.post('/Home/GetEntries',
           { jsonData: firstLetterAsJson },
            EntriesReceived());
}

コントローラーに HttpPost 属性を追加してみました:

[HttpPost]
public void GetEntries(string firstLetter)
{
    Debug.WriteLine(firstLetter);
}

パラメータ名を「id」に変更して、ルート マッピングと一致させようとしました。

[HttpPost]
public void GetEntries(string id)
{
    Debug.WriteLine(id);
}
4

1 に答える 1

4

以下は動作するはずです

function GetEntries(firstLetter) {
    $.post('/Home/GetEntries', { firstLetter: firstLetter }, EntriesReceived);
}

また、コールバックが3 番目の引数として関数にEntriesReceived渡される方法にも注意してください。$.postあなたのコードEntriesReceived()では、コールバックとして渡すのではなく、関数 ( ) を呼び出しているようです。ここでは、この関数が次のように定義されていると仮定します。

function EntriesReceived(result) {
    // handle the result of the AJAX call here
}

また、JSON リクエストとして送信する場合は、適切なリクエスト コンテンツ タイプを指定できる $.ajax メソッドを使用する必要があります。

function GetEntries(firstLetter) {
    $.ajax({
        url: '/Home/GetEntries',
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify({ firstLetter: firstLetter }),
        success: function(result) {
            // handle the result of the AJAX call here
        }
    });
}

コントローラー アクションで私が目にするもう 1 つの問題は、それを として定義したことですvoidActionResultASP.NET MVC では、すべてのコントローラー アクションがクラスのインスタンスを返さなければならないという共通の確立された規則があります。ただし、クライアントに何も返したくない場合は、この場合に特定の ActionResult - EmptyResult を使用します。

[HttpPost]
public ActionResult GetEntries(string firstLetter)
{
    Debug.WriteLine(firstLetter);
    return new EmptyResult();
}
于 2013-02-03T16:41:41.303 に答える