在 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】:最简单的方法是在您的代码隐藏类中创建一个字符串变量或属性,并使用<%= %>
表示法(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 页面中的 <asp:literal>
生成的 HTML。
【讨论】:
警告:这会使您容易受到 xss 错误的影响。标签控件将清理输出。 ASP.Net 4(上周发布)有一个新的<%: %>
bee sting,你应该几乎总是使用而不是<%= %>
【参考方案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 数据库
win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:WindowsMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NE