2009-07-18 15 views
1

現在、私のサイトでJQuery UIダイアログを使用しています。しかし、私は最近、ダイアログでトリガーされたさまざまなアクションの成功/失敗の通知のために、MVC TempDataコレクションを使用し始めました。特に派手でも新しいものでもない。しかし、それは私がシンプルで明らかに解決策を見つけることができないという問題を提起しています。AJAXなしのJQuery UIダイアログからのMVCメソッドの呼び出し

私のダイアログの中には、データの提出が成功したときに新しいページにリダイレクトされます。このデータはjQuery.Postを使用して送信されており、ページ上のwindow.locationを使用して正常に送信されたときにリダイレクトを行います。ただし、コントローラメソッドで設定したTempDataは使用できません。これを処理するには、ActionResultの戻り値の型が必要なようです。

私の質問は、JQuery UI Dialogsを使用して、jQuery POSTまたはAJAX呼び出しを使用せずにデータをコントローラに送信する方法として人々が提案するものでした。明らかに私はダイアログ内にフォームを埋め込み、それを使用することができますが、JQuery UI Dialogを使用する際にはボタンをすべて処理するなどの点で半分になります。

多分私は本当に明白な何かが欠けているかもしれませんが、どんな助けも大歓迎です。どうもありがとう。

更新:これはActionメソッド全体です。 NB - これは実装の1つで、実際にはいくつかの方法で試しました。しかし、これは現在の実装です。アクションが呼び出され、私たちはクライアント側のリダイレクトを行うされたら、私が設定したTempDataを、NULLとして出てくる

[Authorize] 
[AcceptVerbs(HttpVerbs.Post)] 
    public void RetireSelf(int playerKey) 
    { 
     PlayerDTO player = _playerTask.GetPlayer(playerKey); 

     _log.Info("Player retiring themselves from ladder " + player.Name + player.PlayerKey); 

     UserDTO user = _userTask.GetUser(CurrentUserName); 

     if (user.UserKey != player.UserKey) 
     { 
      throw new LadderSecurityException(CurrentUserName + "trying to self retire another player"); 
     } 

     _playerTask.RetirePlayer(playerKey); 
     TempData["notification"] = "You were retired from the ladder."; 
    } 
+0

あなたは言った:しかし、これはコントローラメソッドで設定したTempDataは使用できないことを意味します。これを処理するにはActionResultの戻り値の型が必要なようです。コードを投稿して、POSTアクションでTempDataをどのように使用していますか? –

+0

確かに、とても簡単です。 POSTアクションでは、次のコード行があります。 TempData ["notification"] = "通知はここにあります。 非常に単純ですが、次のリクエストでは常にNULLとして出力されます。私たちが非AJAX呼び出しを介してメソッドを呼び出すときだけ、それは期待どおりに出てきます。 – pauldunlop

+0

私はコードサンプルといくつかの情報を含めるように投稿を更新しました。 – pauldunlop

答えて

1

あなたはRetireSelfアクションからするJsonResultを返すことができます。

if(Request.IsAjaxRequest()) 
{ 
    return Json(new { Notification = "You were retired from the ladder."}); 
} 

クライアントの場合:

$.ajax({ url: ..., type: "POST", data: ..., dataType: "json", 
    success: function(data) { 
     var notification = data.Notification; 
    } 
}); 
+0

しかし、この方法を使用すると、同じ操作で別のページにリダイレクトする方法はありますか? JSONデータが次のページで利用できないのではないでしょうか?クエリ文字列を渡さない限り、明らかに私はやりたくはありません。 – pauldunlop

+0

私が最終的にやってみたいのは、アクションを実行し、ページからナビゲートし、通知メッセージを表示することです。私は通知を表示することができます、私はページのリダイレクトを処理することができますが、一見2つの操作ではありません。 – pauldunlop

+0

POSTでTempDataも設定しています。次のリクエストでは、TempDataからの情報が存在するはずです。その「次のページ」アクションのコードを投稿してください。おそらくそのコードに問題がありますか? 「次のページ」でどのようにTempDataを読んでいますか? –

関連する問題