25

UserIdJsonResultとしてのユーザーに基づいてユーザーのレコードをフェッチしています...

public JsonResult GetClients(int currentPage, int pageSize)
{
   if (Session["UserId"] != "")
   {
      var clients = clirep.FindAllClients().AsQueryable();
      var count = clients.Count();
      var results = new PagedList<ClientBO>(clients, currentPage - 1, pageSize);
      var genericResult = new { Count = count, Results = results };
      return Json(genericResult);
   }
   else
   {
         //return RedirectToAction("Index","Home");
   }
}

asp.net mvcのJsonResultメソッドからコントローラーアクションにリダイレクトする方法はありますか?

編集: これはうまくいかないようです...

if (Session["UserId"] != "")
            {
                var clients = clirep.FindAllClients().AsQueryable();
                var count = clients.Count();
                var results = new PagedList<ClientBO>(clients, currentPage - 1, pageSize);
                var genericResult = new { Count = count, Results = results ,isRedirect=false};
                return Json(genericResult);
            }
            else
            {
                return Json({redirectUrl = Url.Action("Index", "Home"), isRedirect = true });
            }
4

5 に答える 5

61

これは、このコントローラーアクションをどのように呼び出すかによって異なります。JSONを使用しているので、AJAXで呼び出していると思います。この場合、コントローラーアクションからリダイレクトすることはできません。successこれは、AJAXスクリプトのコールバックで行う必要があります。それを達成する1つの方法は次のとおりです。

return Json(new 
{ 
    redirectUrl = Url.Action("Index", "Home"), 
    isRedirect = true 
});

そして成功のコールバックでは:

success: function(json) {
    if (json.isRedirect) {
        window.location.href = json.redirectUrl;
    }
}

備考:isRedirect = falseコントローラーアクションの最初のケースであるリダイレクトしたくない場合に備えて、JSONに必ず含めてください。

于 2010-05-19T11:24:04.730 に答える
3

ダリン・ディミトロフの答えに追加します。C#.NET MVCの場合-別のページ/コントローラーにリダイレクトし、オブジェクト/モデルを新しいコントローラーに送信する場合は、次のようにすることができます。

JsonResultメソッド(コントローラー内)の場合:

 ErrorModel e = new ErrorModel();
            e.ErrorTitle = "Error";
            e.ErrorHeading = "Oops ! Something went wrong.";
            e.ErrorMessage = "Unable to open Something";



return Json(new 
{ 
    redirectUrl = Url.Action("Index", "Home",e), 
    isRedirect = true 
});

そして成功のコールバックでは:

success: function(json) {
    if (json.isRedirect) {
        window.location.href = json.redirectUrl;
    }
}

そして、新しいコントローラーが以下のようにモデル/オブジェクトを受け入れることができる場合..オブジェクトを新しいコントローラー/ページに渡すことができます

    public ActionResult Index(ErrorModel e)
    {
        return View(e);
    }

お役に立てれば。

于 2013-05-02T20:59:38.940 に答える
2

電話をかけることについてどう思いますか:

return (new YourOtherController()).JSONResultAction();

リダイレクトを使用する代わりに?

于 2011-09-27T08:02:23.560 に答える
1

そして、あなたが地域で働くならば...

コントローラ:

return Json(new
        {
            redirectUrl = Url.Action("Index", "/DisparadorProgSaude/", new { area = "AreaComum" }),
            isRedirect = true
        });

意見:

success: function (json) {

                           if (json.isRedirect) {
                           window.location.href = json.redirectUrl;
                           }
                        },
于 2016-11-08T16:43:39.080 に答える
0

これを行う方法はありません。クライアントはAJAXスクリプトを実行しているため、他のものを処理することはできません。

コールバック関数で返されたデータに基づいて、クライアントスクリプトでリダイレクトすることをお勧めします。

ここで同様の質問を見てください:http://bytes.com/topic/javascript/answers/533023-ajax-redirect

于 2010-05-19T11:23:10.497 に答える