leo*_*ora 6 variables asp.net-mvc
如果我在ASP.NET MVC视图中有代码,如下所示:
<%
bool admin = false;
if (ViewData.ContainsKey("isAdmin"))
{
admin = (bool)ViewData["isAdmin"];
}
if (admin)
{
%>
<%--
... generate table of html
--%>
Run Code Online (Sandbox Code Playgroud)
然后在页面下面我在另一个代码渲染块中创建另一个脚本<% %>,我可以重用该admin变量并且它会记住页面中较高的状态,还是范围内的<% %>块?
以下是关于MVC Scope的注意事项:
内容控件中声明的变量仅在内容控件中作用域:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
ScopeTest
<%
string testVar1 = "This is a test.";
%>
<%=
testVar1
%>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>ScopeTest</h2>
The below reference to the testVar1 will cause a parser error, because the variable is out of scope.
<%=testVar1 %>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
**在没有MasterPage的View页面中,在runat ="server"控件中声明的变量仅在该控件中可用.在runat ="server"控件之外声明的变量不可用于该控件.
否则,整个页面都可以使用声明的变量.**
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<%
string strPageScope = "PageScope Variable.";
%>
<head runat="server">
[HEAD]<br />
<title>ScopeTest2</title>
<%
string strHeadScope = "Head Scope...";
%>
This WORKS:
<%=
strHeadScope %>
<br />
ViewData available everywhere:
<%=
ViewData["VDScope"].ToString()
%>
<br />
strPageScope is NOT Available BECAUSE THE RUNAT=SERVER:
<%
//Response.Write(strPageScope);
%>
<br />
[END OF HEAD]<br />
</head>
<body>
[BODY START]<br />
strHeadScope NOT AVAILABLE, BECAUSE THE HEAD HAS RUNAT="SERVER" IN IT.
<%
//Response.Write(strHeadScope);
%>
<br />
ViewData is available everywhere:
<%
Response.Write( ViewData["VDScope"].ToString());
%>
<br />
<div>
<%
string strBodyVar = "Testing Var Declared in Body.";
%>
</div>
<%
Response.Write(strBodyVar);
%>
<br />
Page Scope works:
<%=
strPageScope
%>
<br />
[END BODY]
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
控制器代码,如果好奇:
public ActionResult ScopeTest(){return View(); }
public ActionResult ScopeTest2()
{
ViewData["VDScope"] = "ViewDataScope";
return View();
}
Run Code Online (Sandbox Code Playgroud)
变量通常在视图中作用域,但它可能会与标记混淆.将整个视图视为单个方法,将标记之外的所有内容(以及标记本身)视为空白.在视图中块外部定义的变量将作用于整个视图.在块内定义的变量(foreach循环/ if then/using)将作用于该块.您不能在先前已在块外部定义的块内重用变量.
| 归档时间: |
|
| 查看次数: |
7155 次 |
| 最近记录: |