2011-12-06 2 views
2

こんにちは、特定の条件がPartialViewResultメソッドを使用しているページでない場合、ページをリダイレクトしようとしています。しかし、私はそれを行うことができません。私のコードは次の通りのようなものです:PartialViewResult()メソッドでページをリダイレクトする

public PartialViewResult Visit() 
{  
    int visit = 0; 
    if (base.IsLoggedIn() == true) 
    { 
     visit++; 
    } 
    else 
    { 
     // toDO redirect to home/index page 
    } 
} 
+0

すべてのコードパスが結果を返すわけではありません。ユーザーがログインしているときにはどうなりますか? – Pieter

+0

尋ねられていることを理解できません。 – RayLoveless

答えて

5

コードあなたがコンパイルされません提供スニペット。すべてのコードパスから結果を返す必要があります。私は今あなたが達成しようとしているかを理解信じる

public ActionResult Visit() 
{ 
    int visit = 0; 

    if (base.IsLoggedIn() == true) 
    { 
     visit++; 
     return PartialView(); 
    } 
    else 
    { 
     return RedirectToAction("ACTION_NAME_GOES_HERE"); 
    } 
} 

UPDATE:このような何かを試してみてください。ログインしていないユーザーがajaxリクエストを行った場合は、ブラウザでそのユーザーをリダイレクトします。

public ActionResult Visit() 
{ 
    int visit = 0; 

    if (base.IsLoggedIn()) 
    { 
     visit++; 
     // whatever else needs to be done 
     return PartialView(); 
    } 
    else 
    { 
     // Note that this could be done using the Authorize ActionFilter, using 
     // an overriden Authorize ActionFilter, or by overriding OnAuthorize(). 
     if (!base.IsLoggedIn()) 
      return new HttpUnauthorizedResult(); 
    } 
} 

はあなたのweb.configファイルで構成されていると仮定すると、応答はこのシナリオで欲しいものではありません302リダイレクトされます:私は次のようにアクションメソッドを修正することをお勧めします。このASP.NETの動作を防止することができ、401権限応答を返すことができる方法を説明フィル・ハークのブログ投稿を参照してください。

http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx

その後、あなたはあなたができる、AJAX要求を発行するためにはjQueryを使用していると仮定代わりに、部分ビューを使用しての

$.ajax({ 
    url: '/your_controller/visit', 
    type: 'GET', 
    statusCode: { 
     200: function (data) { 
      // data = your partialview 
     }, 
     401: function (data) { 
      location.href = '/the_path/to_redirect/to'; 
     } 
    } 
}); 
+0

しかし、私のsenerioで私はActionResultを使用することができません –

+0

私は興味があります...あなたのシナリオでActionResultを使用することができませんなぜですか? –

+0

よく私はこのメソッドをajaxリクエストを介してユーザーコントロールとして呼び出しています –

-3
else 
{ 
    return RedirectToAction("Index.aspx"); 
} 
+0

Response.RedirectはASP.NET MVCでは動作しません。 – slfan

+1

このsenerioではRedirectToActionまたはActionResultを使用できません。 PartialViewResultのみを使用してこれをリダイレクトする必要があります。しかし、私はそれをする方法を考えていませんでしたか? –

0

共通ロジックのこの種は、ビュー/コントローラに属していないとして、あなたはおそらく、OnActionExecutingまたは類似を使用してになります:401応答を処理します。たとえば:

[AttributeUsage(AttributeTargets.All)] 
public sealed class RecordLoggedInCountAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      visit++; 
     } 
     else 
     { 
      filterContext.HttpContext.Response.Redirect("http://google.com"); 
     } 
    } 
} 

は、その後、あなたが、私は完全に問題を理解していないことを確認して[RecordLoggedInCount]

2

のためにこれを記録したい任意のコントローラ/アクションを飾るが、それは私のために働いたとして、これは、誰かを助けるかもしれません。

else 
{ 
    Response.Redirect("~/default.aspx"); 
    return null; 
} 
+0

私のシナリオではうまくいきます。不思議なことに、誰かがこれを読んでも、このアプローチに何か問題はありますか? – RLH

関連する問題