2013-12-09 18 views
2

我是web開發中的新手。在視圖中顯示經過身份驗證和匿名的內容

考慮到用戶可以登錄網站(EF Facebook的註冊)

假設我知道,如果一個用戶登錄或不(我對我的方式找到如何;) - 這可能在相同的視圖(.cshtml) - 部分元素將隱藏,如果用戶匿名或將顯示,如果用戶登錄?你知道 - 就像好的屬性或條件(簡而言之 - 把邏輯放在相同的視圖上,而不是管理兩個.cshtml)

回答

2

我個人沒有,如果我認爲聲明是因爲他們可以很容易地開始變混亂,特別是如果你正在使用角色的粉絲。

這是我喜歡這樣做的方式來避免這種情況。

  1. 創建一個包含邏輯的HTML輔助這樣的抽離:

    namespace System.Web.Mvc 
    { 
        public static class HtmlHelperExtensions 
        { 
         public static MvcHtmlString UserMessage(this HtmlHelper htmlHelper) 
         { 
         string welcomeFormat = "Welcome, {0}"; 
         var isAuthenticated = htmlHelper.ViewContext.HttpContext.User.Identity.IsAuthenticated; 
         var name = htmlHelper.ViewContext.HttpContext.User.Identity.Name; 
         var message = isAuthenticated ? string.Format(welcomeFormat, name) : string.Format(welcomeFormat, "anonymous!"); 
         return new MvcHtmlString(message); 
         } 
        } 
    } 
    
  2. 叫我的視野內這種方法是這樣的:

    <p>@Html.UserMessage()</p> 
    

如果你是新的到Web開發的助手擴展代碼可能看起來有點壓倒性,但你最終只會寫一次和第二次你用來在別處調用它的代碼更加簡單和可重用。

這裏是關於HTML輔助以獲得更多信息的文章:

http://www.codeproject.com/Articles/649394/ASP-NET-MVC-Custom-HTML-Helpers-Csharp

更新

忘了提這個技術太,而這又避免了if語句。

創建兩個部分視圖_auth.cshtml & _unauth.cshtml

創建一個檢查,如果用戶進行身份驗證&收益相關的部分即

public ActionResult FooContent() 
{ 
    if (User.Identity.IsAuthenticated) 
    { 
     return PartialView("_auth"); 
    } 
    else 
    { 
     return PartialView("_unauth"); 
    } 
} 

然後從調用操作您的視圖中像這樣的動作:

@Url.Action("FooContent", "Contoller"); 

這也可以用來檢查角色並返回不同的部分。

+0

非常感謝這兩個答案,並會嘗試它們,讓你很快知道。我想這裏沒有最佳做法?像這裏的一些網頁設計模式? – user1025852

+0

個人選擇真的,給他們一個解決方案的嘗試,看看你更喜歡。:) – hutchonoid

+0

我完全忘記了我的答案更新的方法。我認爲這比if語句更好。 :) – hutchonoid

2

是的,視圖可以有邏輯。

下面是一個代碼示例,它根據用戶是否登錄,向用戶顯示不同的內容。

@if (User.Identity.IsAuthenticated) 
{ 
    <p>Welcome, @User.Identity.Name!</p> 
} 
else 
{ 
    <p>Welcome, anonymous!</p> 
} 
相關問題