2017-01-08 78 views
1

私は、長持ちするコントローラの動作中に表示される単純なスピナーをASP.NETコアで作成しようとしています。ASP.NetコアMVCブロックリダイレクトのdata-ajax-beginスクリプト

コードは期待通りに機能しますが、コントローラの動作でリダイレクトがブロックされているようです。 このシナリオでリダイレクトを行う方法はありますか?

マイIndex.cshtml

<script src="~/lib/jquery/dist/jquery.min.js"></script> 
<script src="~/lib/jquery-ajax-unobtrusive/src/jquery.unobtrusive-ajax.js"></script> 

<script type="text/javascript"> 
    function onBegin() { 
     $("#divLoading").html('<image src="~/images/ajax-loader.gif" alt="Loading, please wait" />'); 
    } 
    function onComplete() { 
     $("#divLoading").html(""); 
    } 
</script> 

<form data-ajax="true" data-ajax-begin="onBegin" data-ajax-complete="onComplete" asp-action="LoadLongLasting" asp-controller="Home"> 
    <input type="submit" value="Load Long lasting"/> 
</form> 
<div id="divLoading"></div> 

コントローラのアクションの例:

public ActionResult LoadLongLasting() 
    { 
     bool result = GetLongLastingResult(); 

     if(result) 
     { 
      return View(); 
     } 

     return RedirectToAction("Error"); 
    } 
+0

アヤックスの全体のポイントは、**同じ**ページに滞在することです。 Ajaxコールは決してリダイレクトされないので、あなたの 'return RedirectToAction(" Error ");は無意味です。 –

+0

OK、実装されたスピナーをリクエストの開始時に表示し、Ajaxなしで最後に隠すのがベストプラクティスとなります。私はこれが非常に一般的なシナリオだと信じていますが、正直言って私はヒントはありません。 – Herman

答えて

1

あなたはJSONを返すと、このようにするonSuccess機能にリダイレクト記述する必要があります。

ビュー:

<script type="text/javascript"> 
    function onBegin() { 
     $("#divLoading").html('<image src="~/images/ajax-loader.gif" 
alt="Loading, please wait" />'); 
    } 
    function onSuccess() { 
     if(data.status === 1) { 
      window.location.href = "/yourpage"; 
     } 
    } 
    function onComplete() { 
     $("#divLoading").html(""); 
    } 
</script> 

<form data-ajax="true" data-ajax-begin="onBegin" data-ajax-complete="onComplete" data-ajax-success="onSuccess" asp-action="LoadLongLasting" asp-controller="Home"> 
    <input type="submit" value="Load Long lasting"/> 
</form> 

コントローラー:

public ActionResult LoadLongLasting() 
{ 
    bool result = GetLongLastingResult(); 

    if(result) 
    { 
     return View(); 
    } 
    return Json(new { status = 1 }); 
    //return RedirectToAction("Error"); 
} 
関連する問題