8

そんな簡単な質問をするのはちょっとばかげている気がしますが、答えが見つからないようです。ASP.NET (C#) は初めてですが、レポートを表示する一連の単純な Web ページを作成することで学習しています。会社名を表す変数があります。この変数を Web ページの複数の場所に出力する必要があります。これを使用して変数を出力することがわかった唯一の方法は次のとおりです。

company_name.Text = "Acme Windows";

それから

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

私の問題は、ページの複数の場所で company_name を使用したいということです。ページに配置されるたびに同じ値を保持する別の変数を作成する必要がありますか? 変数を表示したいすべての場所に上記の XML コードをコピーすると、その ID が既に定義されているため、明らかにコンパイル エラーが発生します。

非常に明白な何かが欠けているように感じます。

4

5 に答える 5

11

これを行う最も簡単な方法は、コード ビハインド クラスで文字列変数またはプロパティを作成し、<%= %>表記法 ( の略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 エンコードするための新しいショートカット表記 ( Html Encoding Blocks ) が導入されています。

<%: this.CompanyName %>

元のアプローチに関して、ASP.NET Web コントロールLiteralは、Web ページの個々の部分を表すようなものです。オブジェクト インスタンスは、.aspx ページでcompany_name生成された HTML の特定の部分を参照するため、ページ上でそれらを複数回使用することはできません。 <asp:literal>.

于 2010-04-19T17:20:38.703 に答える
3

この場合、ページ上にプロパティを作成し、必要なすべての場所に出力します。

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

そしてaspxで:

.NET 4.0:

<%:this.CompanyName%>

4.0 より前:

<%=this.companyName%>
于 2010-04-19T17:22:39.953 に答える
1

なぜこれがコミュニティ wiki なのですか?

とにかく、あなたが望むものを達成するためのいくつかの可能性があります。同じ名前を持つ複数の変数を配置することは、ベスト プラクティスではありません。いっぱいになっている場合は、「半動的」値と呼びましょう。コード内にハードコーディングすることはしません。私がすることは、グローバル リソース ファイルを使用することです。

App_GlobalResources フォルダーに新しいリソース ファイルを作成し、キー「COMPANY_NAME」と値「Acme Windows」を追加します。次に、ASPXコード内で次のようなことができます

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

このアプローチについて詳しく説明したブログ記事を以前に書きました。リソース ファイルの利点は、コードに手を加える必要がないことです。

さらに「リファクタリング」したい場合は、ページのさまざまな位置に表示する必要がある一般的な会社情報があると仮定して、会社名、電話番号、連絡先情報などの情報を含む別の UserControl を作成できます。そのコントロールには、その情報を正確に 1 回表示するために使用するリテラル、ラベルがあります。この UserControl は、実際のページの必要な場所に複数回配置されます。

于 2010-04-19T17:31:32.413 に答える
1

コントロールを動的に追加できます。

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

リテラルを追加する特定のコントロールへの this.Page.Controls 参照を変更することにより、ページ上の特定のコントロール内にコントロールを追加することもできます。

于 2010-04-19T17:22:41.967 に答える
0

最も簡単な答えは、複数のコントロールを定義する必要があるということです。

しかし、より良い解決策はこれを行うことです:

コード ビハインド側でプロパティを作成します。

protected CompanyName{get;set;}

次に、aspx 側で<%= %>コマンドを使用して参照します。

<span><%=CompanyName %></span>
于 2010-04-19T17:21:59.020 に答える