2009-05-21 193 views
3

我在頁面上有一個鏈接,允許用戶在他們登錄時執行特定操作。如果他們沒有登錄,我希望鏈接先將他們指向登錄頁面。這很常見。什麼是最好的方法來做到這一點?目前我正在這樣做,但我不喜歡它:重定向到登錄頁面策略

<% if(Model.IsUserAuthenticated){ %> 
<%= Html.ActionLink("Start Puzzle", "StartPuzzle", "Puzzles")%> 
<%} else { %> 
<%= Html.ActionLink("Start Puzzle", "Login", "Account")%> 
<%} %> 

你明白了。我真的不喜歡在這個視圖中有邏輯。如果沒有登錄,只是讓「StartPuzzle」動作重定向會更好嗎?

回答

2

創建htmlhelpers擴展方法,這將檢查用戶是否被驗證,並返回一個鏈接或另一個......是這樣的:在你看來

<%=Html.RenderLoginLink()%> 

和的HtmlHelper:

if(autorized) 
{ 
    return Html.ActionLink("Start Puzzle", "StartPuzzle", "Puzzles"); 
} 
else 
{ 
    return Html.ActionLink("Start Puzzle", "Login", "Account"); 
} 
+0

哦,是的,從rob conery的舊規則是:如果你有'如果'在你的看法這就是htmlhelper的地方:) – Marko 2009-05-22 13:33:40

1

在視圖中多邏輯是完全正常的,海事組織。但是,如果還有更多,或者你不想那麼多,那麼你可以有兩個單獨的視圖來登錄和匿名用戶,並決定你要在控制器中顯示哪一個。或者有一個視圖,並根據條件傳遞來自控制器的鏈接文本和URL。

1

在控制器的StartPuzzle操作頂部放置一個「授權」屬性。通過這種方式,未經身份驗證的用戶將被自動重定向到登錄頁面,並使returnUrl指向他未登錄時訪問的內容。這樣,在成功登錄後,他將被重定向回拼圖開始。