2009-07-22 120 views
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

您的视图应该只负责显示您的数据。你的控制器应该处理重定向逻辑。

已为此创建授权属性。将它添加到您喜欢控制器的操作方法:

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'

2

不要重新发明轮子。 AuthorizeAttribute已经做到了这一点。只需在方法上方添加[授权]即可。

+0

有没有NotAuthorized属性 – leora 2009-07-22 17:38:10

+1

的AuthorizeAttribute将重定向无权在你的web.config – 2009-07-22 17:52:47

+0

号指定的登录URL这将是微不足道写一个用户,但我实在看不出使用。 – 2009-07-22 17:54:35

0

这是程序逻辑,所以它应该在控制器中,而不是在视图中。

而不是return View();尝试return RedirectToAction(...);传递到另一个控制器/行动 在一个不错的“MVC”方式的参数,或者return Redirect(...);如果你只是想用一个简单的网址。