0

テーブルからアイテムを削除しようとしています。それにはAjaxリンクがあります。

@Ajax.ActionLink("Delete", "DeleteConfirm", new { id = Model.ID }, new AjaxOptions {
    HttpMethod = "POST", UpdateTargetId = "TableID", OnSuccess = "CloseDialog", OnFailure = "AlerDialog"
  })

POSTメソッドでコントローラからDeleteConfirmメソッドを呼び出します。ActionLink がエラーをキャッチして OnFailure 関数を実行する (アラート ダイアログを表示する) ように、何かを実行する単純なコントローラーを作成しました。

コントローラ:

public ActionResult DeleteConfirm(int id)
        {            
            // code here
        }

OnFailure 関数が呼び出すようにコントローラー メソッドから何を返すか?

4

3 に答える 3

2

OnError は、サーバー側でエラーが発生したときに発生します。エラーとは、例外を意味し、500 サーバー エラーを除いて、クライアント側で例外メッセージを渡すことはできないと思います。良いアプローチは、アクションが返す CustomResponse クラスを持つことだと思います。あなたの場合、次のようなものです:

Class DeletionResponse
{
    public bool IsDeletionSuccesfull {get; set; }
    public string Message {get; set;}
}

DeleteConfirm アクションでは、新しい応答を作成します。これは、おそらく ActionResult クラスを継承する必要があります (MVC は初めてなのでわかりません)。削除中に何らかのエラーが発生した場合は、DeletionSuccesfull を false に設定し、Message を例外のメッセージまたはカスタム メッセージに設定します。

クライアント側では、ポイントは OnSuccess ハンドラーで成功を調べてから、何をすべきかを決定することです。何かのようなもの:

function handleResponse(deletionResponse){
  if(deletionResponse.d.IsDeletionSuccesfull){
     CloseDialog();
  }
  else{
     AlertDialog(deletionResponse.d.Message);
  }
}
于 2014-01-26T21:08:29.587 に答える
1

例外をスローするのはどうですか?

public ActionResult DeleteConfirm(int id)
    {
        try
        {
            //make your call to the database here
            return View();
        }
        catch (ExceptionType1 ex)
        {
            //log the details of your error for support purposes, alerting tracing etc. 
            ex.Message = "Nice message for user"
            throw ex;
        }
        catch (ExceptionType2 ex)
        {
            //log the details of your error for support purposes, alerting tracing etc. 
            ex.Message = "Another nice message for user"
            throw ex;
        }
    }

ajax 呼び出しは、それが失敗したことを認識し、正しい関数を実行します。

編集 コメントを満たすために、2番目の例外タイプを追加しました。これは良い答えであり、反対票は不公平だと今でも感じています。

于 2013-02-08T12:36:01.933 に答える