首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >aspx页面中的可变范围

aspx页面中的可变范围
EN

Stack Overflow用户
提问于 2012-03-26 13:08:39
回答 3查看 12.1K关注 0票数 16

为什么scriptPath变量是在代码底部的超出作用域的

它不应该在整个页面的范围内吗?在MVC中,如果我在页面顶部标记如下

代码语言:javascript
复制
@{
    string scriptPath = "assets/scripts/",
           gkoConfig = "GkoConfig.js";
}

它可在整个当前视图中使用。现在我回到WebForms有一段时间了,我错过了什么呢?

如果我更改代码位置,它会变得更奇怪,因为在<head>中,我不再能够访问teh变量,但我现在已经在<body>中访问了.*-/

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-08 18:29:54

在Web .aspx文件中声明变量时,实际上是在自动生成的呈现方法中声明一个局部变量。ASP.NET为标记为runat="server"的所有标记生成单独的呈现方法,因此实际上为head元素提供了一个单独的方法。现在,您声明的变量只能存在于这些方法中的一种--因此出现了“怪异”行为。

您可以看到这是如何工作的,如果您的pre-compile your application using aspnet_compiler.exe.,您将得到编译的DLL文件,为您的每个网页;只要打开其中一个在反射器,以查看生成的代码。我用head标记外声明的变量编写了与您的代码相当的最小值,下面是我得到的顶级呈现方法:

代码语言:javascript
复制
private void __Render__control1(HtmlTextWriter __w, Control parameterContainer)
{
    string str = "scripts/";
    __w.Write("\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n");
    parameterContainer.Controls[0].RenderControl(__w);
    __w.Write("\r\n<body>\r\n    ");
    parameterContainer.Controls[1].RenderControl(__w);
    __w.Write("\r\n    <script type=\"text/javascript\" src=\"");
    __w.Write(str);
    __w.Write("jquery-1.4.1.min.js\"></script>\r\n</body>\r\n</html>\r\n");
}

您可以看到,我声明的变量(在这里名为str)的作用域是该方法,它正在调用其他方法来呈现head (以及标记为runat="server"的表单元素)。

一个快速而肮脏的解决方案可能是从head标记中删除runat="server";但是,我建议您在代码隐藏类中声明一个受保护的变量。将这样的行添加到代码隐藏文件中将有效:

代码语言:javascript
复制
protected string scriptPath, gkoConfig;

然后,您可以在Web窗体代码中的任何地方使用这些变量。

票数 15
EN

Stack Overflow用户

发布于 2014-10-15 04:15:32

您还可以像这样声明常量:

代码语言:javascript
复制
<script runat="server">
    private const string scriptPath = "assets/scripts/";
    private const string gkoConfig = "GkoConfig.js";
</script>
票数 5
EN

Stack Overflow用户

发布于 2012-03-30 14:59:39

我怀疑ASPX页面的头与主体是分开处理的。

这个问题很容易解决--您所需要做的就是使用代码隐藏中的类字段--将访问级别设置为受保护。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9872712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档