2017-03-07 3 views
0

私はjsonの結果を返すApiControllerという名前の通常のasp mvcコントローラを作成しました。そのアクションメソッドの1つでは、jsonを返してから、別のアクションメソッドにリダイレクトします。アクションフィルタを使用してjsonを返し、次にアクションメソッドにリダイレクトします

APIリクエストにJSONを戻った後、私はAction filterを使用してみましたSignalR

使用して通知を掲示しなければならないが、それは他のアクションメソッドにリダイレクトされていません。

処置方法1

[NotifyUserActionFilter] 
public ActionResult NotifyUser(int ID) 
{  
    return Json("true",JsonRequestBehavior.AllowGet); 
} 

処置方法2

//the returning view has signalR javascript in it 
    public ActionResult ThankYou() 
    { 
     string Tempval = TempData["tempID"].ToString(); 
     return View(); 
    } 

アクションフィルタ

public class NotifyUserActionFilter : System.Web.Mvc.ActionFilterAttribute 
{ 
    public override void OnResultExecuted(ResultExecutedContext filterContext) 
    { 

     var ID = filterContext.HttpContext.Request.Params["ID"]; 

     filterContext.Controller.TempData.Add("tempID", ID); 

     filterContext.Result = new RedirectToRouteResult(
       new RouteValueDictionary 
        { 
         { "controller", "Api" }, 
         { "action", "Thankyou" } 
        }); 

    } 
} 

答えて

0

Assuあなたが "NotifyUser"の結果を必要とし、あなたのビューでそれを消費すると、jquery AJAX呼び出しを使用して問題に近づくでしょう。

単に、Ajaxの "NotifyUser"メソッドを呼び出してください。 ajax呼び出しの "成功"では、私はjson結果が "true"かどうかを調べるでしょう。それは私は新しいビューにリダイレクトします。 "window.location ....."を設定する

jsonの結果を使用しない場合は、 "NotifyUser"メソッドでリダイレクトできます。

+0

"NotifyUser"はモバイルアプリで使用されます。実際には、 "NotifyUser"が呼び出され、signalRスクリプトを実行している "ThankYou"の表示にリダイレクトするときにjson結果を返すようにします。 – Lishna

+0

クライアント(モバイル)アプリケーションでリダイレクトを行う必要があります。 NotifyUserの結果を消費する場所では、新しいビュー "Thankyou"にリダイレクトされます。 – KevDevMan

関連する問題