这个ASP.NET MVC ActionMethod应该有两个视图吗?

时间:2011-02-23 10:04:49

标签: c# .net asp.net-mvc views

我正在使用ASP.NET MVC3并拥有一个非常简单的网站,只允许您登录/创建帐户或列出您的帐户详细信息。

我想要制作主页..基本上就是这样。如果您尚未登录,请让他们登录或创建新帐户。否则,请向他们显示其帐户详细信息简单。

所以我不确定我是否应该这样做......

public ActionResult Index()
{
    return User.Identity.IsAuthenticated ? View("Show") : View("Index");
}

这是一个非常人为的例子,但它基本上描述了我的问题。

我觉得这不是一个好方法..但我应该重定向到另一种方法......就像真正的Show? ..例如。 / Show / UserFoo ????

我只是不确定人们在做什么 - 这是一个常见的模式。

思想?

3 个答案:

答案 0 :(得分:6)

您可以使用[Authorize]属性检查用户是否经过身份验证,如果没有重定向到登录页面。

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

如果您不喜欢默认行为,也可以编写自定义授权属性。

答案 1 :(得分:1)

我会说,不。主要是因为这样可以帮助您保持干爽,以防您希望在两者之间有共同的内容。

而是在视图中检查某人是否经过身份验证。

Razor(干代码):

@if (User.Identity.IsAuthenticated) {
Welcome back, @User.Identity.Username!
} else {
Please <a href="/login">login</a>!
}

我认为这有助于保持干燥。

答案 2 :(得分:-2)

使用LoginView项:

<asp:LoginView runat="server">
    <LoggedInTemplate>
        // this is seen by users who are authenticated, so display info
    </LoggedInTemplate>
    <AnonymousTemplate>
        // this is seen by users not authenticated - so display login form
    </AnonymousTemplate>
</asp:LoginView>

您需要管理身份验证的内容,[Authorize]属性可以为您执行此操作,或者您可以编写自己的自定义实现。