在 ASP.NET 页面上多次重用变量

Posted

技术标签:

【中文标题】在 ASP.NET 页面上多次重用变量【英文标题】:Reuse a Variable Multiple Times on an ASP.NET Page 【发布时间】:2011-02-09 19:08:16 【问题描述】:

我觉得问这么简单的问题有点愚蠢,但我似乎找不到答案。我是 ASP.NET (C#) 的新手,但我正在通过构建一组显示报告的简单网页来学习。我有一个代表公司名称的变量。我需要在网页的多个位置输出这个变量。我发现输出变量的唯一方法是:

company_name.Text = "Acme Windows";

然后

<asp:literal id="company_name" runat="server" />

我的问题是我想在页面的多个位置使用 company_name。每次将其放置在页面上时,我真的必须创建一个单独的变量来保存相同的值吗?如果我只是将上面的 XML 代码复制到我想要显示变量的所有位置,它显然会产生编译错误,因为该 ID 已经定义。

我觉得我错过了一些非常明显的东西。

【问题讨论】:

其实这是一个很好的问题。 【参考方案1】:

最简单的方法是在您的代码隐藏类中创建一个字符串变量或属性,并使用&lt;%= %&gt; 表示法(Response.Write 的缩写)将其呈现在您的页面内嵌:

// You can do this anywhere on your .aspx, as many times as you like.
<%= this.CompanyName %>

// Better yet, html encode the value to protect against various threats,
// such as cross-site script injection (XSS)
<%= HttpUtility.HtmlEncode(this.CompanyName) %>

.NET 4.0 引入了一种新的快捷方式符号 (Html Encoding Blocks) 来对您的输出进行 html 编码:

<%: this.CompanyName %>

关于您的原始方法,像 Literal 这样的 ASP.NET Web 控件代表网页的各个部分 - 您不能在一个页面上多次使用它们,因为对象实例 company_name 指的是由您的 .aspx 页面中的 &lt;asp:literal&gt; 生成的 HTML。

【讨论】:

警告:这会使您容易受到 xss 错误的影响。标签控件将清理输出。 ASP.Net 4(上周发布)有一个新的&lt;%: %&gt;bee sting,你应该几乎总是使用而不是&lt;%= %&gt;【参考方案2】:

最简单的答案是您需要定义多个控件。

但更好的解决方案是这样做:

在事物背后的代码上创建一个属性:

protected CompanyNameget;set;

然后,在 aspx 方面,使用 命令引用它

<span><%=CompanyName %></span>

【讨论】:

【参考方案3】:

在这种情况下,您在页面上创建一个属性并将其输出到您需要的每个地方。

public string CompanyName  get  return "Acme Windows";  

在 aspx 中:

.NET 4.0:

<%:this.CompanyName%>

4.0 之前:

<%=this.companyName%>

【讨论】:

【参考方案4】:

您可以动态添加控件:

Literal myLiteral = new Literal();
myLiteral.text = "Acme Windows";
this.Page.Controls.Add(myLiteral);

您还可以在页面上的特定控件中添加控件,方法是将 this.Page.Controls 引用更改为要添加文字的特定控件。

【讨论】:

【参考方案5】:

为什么这是一个社区维基?

无论如何,您有多种可能性来实现您想要的。放置多个具有相同名称的变量肯定不是最佳实践。如果你把它填满,让我们称之为“半动态”值,我不会把它硬编码在你的代码中。我要做的是使用全局资源文件。

您在 App_GlobalResources 文件夹中创建一个新资源文件,并添加一个值为“Acme Windows”的键“COMPANY_NAME”。然后在您的 ASPX 代码中,您可以执行类似的操作

<asp:literal id="company_name" runat="server" Text="<%$ Resources:GlobalResources, Button_Save %>"/>

我写了一个blog post some time ago 详细介绍了这种方法。资源文件的好处就是不用碰代码。

如果您想进一步“重构”,那么 - 假设您有一些必须在页面上不同位置显示的一般公司信息 - 您可以创建一个单独的 UserControl,其中包含公司名称、电话号码、联系信息等信息等等。在那个控件中,你有你的文字,标签,任何你用来精确显示该信息的东西 1 次。然后将此 UserControl 放置在实际页面上您需要它的位置,甚至多次。

【讨论】:

以上是关于在 ASP.NET 页面上多次重用变量的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net 和 Join 语句中连接到 Access 数据库

缩放 ASP.NET 应用程序

使 asp.net 单选按钮列表显示为引导按钮组

win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:WindowsMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NE

asp.net 点击一下文件名或者一个下载按钮,将文件下载下来怎么做啊???

ASP.NE网站发布注意事项