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

时间:2010-04-19 17:18:23

标签: asp.net templates reusability

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

company_name.Text = "Acme Windows";

然后

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

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

我觉得我错过了很明显的东西。

5 个答案:

答案 0 :(得分:11)

最简单的方法是在代码隐藏类中创建一个字符串变量或属性,并使用<%= %>表示法(Response.Write的缩写)在页面内联呈现它:< / p>

// 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的特定部分。

答案 1 :(得分:3)

在这种情况下,您可以在页面上创建一个属性,并在您需要的每个位置输出该属性。

public string CompanyName { get { return "Acme Windows"; } }

在aspx中:

.NET 4.0:

<%:this.CompanyName%>

4.0之前:

<%=this.companyName%>

答案 2 :(得分:1)

您可以动态添加控件:

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

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

答案 3 :(得分:1)

为什么这是社区维基?

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

您在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,其中包含公司名称,电话号码,联系信息等信息在该控件中,您可以使用您的文字,标签,无论您使用什么来准确显示该信息一次。然后将此UserControl放置在您需要它的实际页面上的位置,甚至多次。

答案 4 :(得分:0)

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

但更好的解决方案是:

在代码背后创建一个属性:

protected CompanyName{get;set;}

然后,在aspx方面,用&lt;%=%&gt; 命令

引用它
<span><%=CompanyName %></span>