我遇到的问题是我的WebPages Razor网站的布局C#代码没有在布局的内容页面上运行,我无法弄清楚原因。我最近问了这个问题并得到了答案,但是,我确定有一种方法可以让布局的C#代码在内容页面上运行,因为我已经建立了另一个我最近的网站检查它是否做了同样的事情,但在该网站上它完全正常。我不明白为什么。
我需要这个的原因是检查用户是否已登录以及用户是否处于特定角色,如果他们不在两者中,则需要将用户重定向到登录页面。如果我把它放在特定页面的C#代码中,代码本身就可以工作,但是根据我自己的理解,如果它被放在布局页面的C#代码中,它肯定也会运行。
正如我所说的那样,我已经在另一个网站上做过这件事了,我在疯狂地试图找出它为什么在我制作的其他网站上工作,而不是在这个网站上我做了什么。我正在制作。
_AdminLayout.cshtml网页,该网站未对其进行处理:
@{
var db = Database.Open("bsdinvest");
var accountLocked = db.QueryValue("SELECT AccountLocked FROM Users WHERE UserID = @0", WebSecurity.CurrentUserId);
if (accountLocked == 1) {
Response.Redirect("~/Admin/Locked");
}
if (!Roles.IsUserInRole("Admin")) {
Response.Redirect("~/Admin/Default");
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="/assets/css/bootstrap.min.css" type="text/css" />
<link rel="stylesheet" href="/assets/css/admin.css" type="text/css" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="/assets/js/bootstrap.min.js" type="text/javascript"></script>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<script src="//tinymce.cachefly.net/4.1/tinymce.min.js"></script>
</head>
<body>
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a href="/Admin/Dashboard">Dashboard</a></li>
<li><a href="/Admin/Accounts/Default">User Accounts</a></li>
<li><a href="/Admin/News/List">News</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="/Admin/Logout">Logout</a></li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
@RenderBody();
<footer>
<p>Powered by <a href="http://mikzercoding.com">NM-Development</a></p>
</footer>
</body>
</html>
管理面板中的“仪表板”页面,布局页面的C#代码也应该在其上运行:
@{
Layout = "~/Admin/_AdminLayout.cshtml";
var db = Database.Open("bsdinvest");
var user = db.QuerySingle("SELECT * FROM Users WHERE UserID = @0", WebSecurity.CurrentUserId);
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Dashboard - Admin Area</title>
</head>
<body>
<div class="content-container">
<h2>Welcome back, @user.FirstName @user.LastName</h2>
<h3>Notes</h3>
<a href="/Admin/Notes/List">All notes</a> | <a href="/Admin/Notes/Add">Add note</a>
@foreach (var row in db.Query("SELECT TOP 5 * FROM AdminNotes ORDER BY DateTime DESC")) {
<div class="text-wrap">
<a href="@Href("~/Admin/Notes/Edit", row.ID)"><span class="glyphicon glyphicon-pencil"></span></a>
<a href="@Href("~/Admin/Notes/Delete", row.ID)"><span class="glyphicon glyphicon-remove"></span></a>
<h4>@row.Heading</h4>
@Html.Raw(row.Text)
<p class="bottom-line">Written by: @row.Author, on: @row.DateTime</p>
</div>
}
</div>
</body>
</html>
如果您还想查看其实际使用的网站的相同文件,请告诉我,我会提供。
提前谢谢你,我为这个问题的长篇文章道歉。
请帮助我!