0

ajax を使用してコントローラー メソッドを呼び出そうとしていますが、内部サーバー エラーが発生しています。

jquery は次のようになります。

function user(id) {
    alert(id+" "+$("#comment").val());
    var param = {
        userId : id,
        comments : $("#comment").val()
    };

    $.ajax({
        url: "/Admin/User",
        contentType: "application/x-www-form-urlencoded",
        type: "POST",
        datatype: "json",
        data: param,
        error: function (xmlHttpRequest, errorText, thrownError) {
            alert(xmlHttpRequest+"|"+errorText+"|"+thrownError);
        },
        success: function (data) {
            if (data != null) {
                alert("success");
            }
        }
    }); 
}

コントローラーは次のようになります。

[HttpPost]
    public ActionResult User(int id, string comment)
    {

        var user = UserModel.GetPerson(id);

        user.IsDeleted = true;

        UserModel.UpdatePerson(user);

        return RedirectToAction("ManageUsers");
    }

コードがコントローラーに到達していないようです。の最初のアラートuser(id)がトリガーされています。誰かがここで何が起こっているかを見ていますか?

4

3 に答える 3

3

オブジェクトのプロパティがアクションの引数と競合しています

オブジェクトのプロパティ

{
   userId : id,
   comments : $("#comment").val()
}

vs. アクション引数

 int id, string comment

一致するように変更してみてください。たとえば、次のようになります。

public ActionResult User(int userId, string comments) { ... }

非同期リクエストからアクションにリダイレクトすることはできないことに注意してください。それは一種の目的を打ち負かします。コールバックでリダイレクトする必要があります。

于 2013-05-22T19:46:34.313 に答える
1

Gabe の回答に続いて、ajax リクエストからアクションにリダイレクトできないことがわかると思います。成功のコールバックでは、リダイレクトするアクションの URL に document.location を設定する必要があります。現在、アクションへのリダイレクトは mvc によって返されていますが、ブラウザには返されていません。

折り返し電話

success: function (data) {
    document.location = data.responseText;
}

コントローラーリターン

return Url.Action("ManageUsers", "Users").ToString();
于 2013-05-22T19:54:10.327 に答える