2009-07-22 22 views
1

私は自分のビューの1つに以下のようなコードを書いています。ここにログインしていれば歓迎の予告が表示され、ログオンページへのリンクが表示されます。asp.net-mvc基準に基づいて新しいページにリダイレクトする

<% 
     if (!Request.IsAuthenticated) 
     { 
    %> 
    <%= Html.ActionLink("Log On", "LogOn", "Account")%> 
<% 
    } 
     else 
     { 
      %> 
      <img src="../images/newspic.gif" width="423" height="194"><br /><br /> 
<% 
     } 
%> 

私がしたいことは、あなたがログインしていない場合、私はそれが自動的にログインページにリダイレクトしたいということです(なぜその余分なステップを持っているとして)

私は行くだろうか上の任意の提案上記のこのビュー内の別のページに自動的にリダイレクトされます。

答えて

6

あなたのビューはあなたのデータを表示する責任しか負いません。コントローラはリダイレクトロジックを処理する必要があります。

Authorize属性は、この目的のためにすでに作成されています。お使いのコントローラのアクションメソッドに追加しますように:

public class CustomerController : Controller { 

    [Authorize] 
    public ActionResult Home() { 
    return View("Home"); 
    } 

} 

または代わりに、すべてのアクションに適用するコントローラに追加することができます。

[Authorize] 
public class CustomerController : Controller { 

    public ActionResult Home() { 
    return View("Home"); 
    } 

} 

次に、あなたのweb.configファイルに

のようなものを設定します
<authentication mode="Forms"> 
    <forms loginUrl="~/Login" /> 
</authentication> 

ユーザーが承認されている場合、「ホーム」ビューが表示されます。彼らが許可されていない場合、彼らは '/ Login'にリダイレクトされます

+0

あなたは私がビューにRequest.IsAuthenticatedコードを持ってはいけないと言っていますか? – leora

+0

リダイレクションロジックをコントローラに配置する必要があります。私は 'if(!Request.IsAuthenticated)...を使ってログインリンクかウェルカムメッセージのどちらかを表示することはあなたのケースで大丈夫だと言います。しかし、あなたのビューがこのような表示ロジックで散らばっているなら、おそらくリファクタリングによって利益を得ることができます。 –

+0

私は少し失われています。 。ユーザーが許可されている場合には1つのビューを表示したいコントローラのコードと、そうでない場合に別のビューを表示することができます – leora

2

ホイールを改造しないでください。 AuthorizeAttributeはすでにこれを行います。メソッドの上に[Authorize]を追加するだけです。

+0

NotAuthorized属性がある – leora

+1

AuthorizeAttributeは、web.config –

+0

で指定されたログインURLに許可されていないユーザーをリダイレクトします。実際には使用できませんが、書き込むのは簡単ではありません。 –

0

これはプログラムのロジックなので、ビューではなくコントローラになければなりません。

代わりのreturn View();は、あなただけのプレーンなURLを使用する場合の素敵な「MVC」の方法、 またはreturn Redirect(...);のパラメータを持つ別のコントローラ/アクションに渡すreturn RedirectToAction(...);を試してみてください。

+1

そして、 IsAuthorizedのリダイレクトでは、リダイレクトしないでください。許可フィルター属性を使用する必要があります。 – David

+1

これは、AuthorizeAttributeが基本的にHttpUnauthorizedResultを返すことでこれを行うので、*間違ったものではありませんが、各アクションでそれをコーディングする代わりに属性を使用します。 – tvanfosson

+0

私は少し失われています。 。ユーザーが権限を持っている場合は1つのビューを表示したいコントローラのコードと、権限がない場合は別のビューを表示するコードの例を表示できますか – leora

関連する問題