0

Visual Studio 2008、C#、ASP.NET

プログラムで Web ユーザー コントロールの複数のコピー (またはインスタンス) を作成する必要がある。

ID=" vhLabel " を含むasp:Labelを含む UserControlFile.ascx があります。そのファイルでは、通常どおり、パブリック文字列vhText変数を使用してラベルの Text プロパティを設定します。

public string vhText
{
    set
    {
        vhLabel.Text = value;
    }
}

このファイルには、C# ではプログラムで作成できない div やその他の html データも含まれているため、ascx ファイルを使用する必要があります。

ここで、コード ビハインド ファイルで次のことを行う必要があります。

  1. このユーザー コントロールを何度も複製します。
  2. 「vhText」変数を介して、各クローンのラベルのプロパティ「Text」に一意の値を設定します。

これらの問題に関する提案を共有してください。必要に応じて、ここにコードを表示できます。私は非常に長い間答えを探していましたが、まだ成功していません。

4

2 に答える 2

0

ユーザー コントロールをプログラムでページに追加する方法のチュートリアルは、http: //msdn.microsoft.com/en-us/library/c0az2h86 (v=vs.100).aspx で確認できます。

あなたの場合、UserControlFile.ascxコントロールに次のようなものが必要です(className属性は重要なビットです):

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="UserControlFile.ascx.cs" Inherits="UserControlFile" className="MyUserControl" %>
<asp:Label ID="vhLabel" runat="server"></asp:Label>

次に、コントロールを含むページの上部で次のようにします (構造に応じてファイル パスを変更します)。

<%@ Reference Control="~/Controls/UserControlFile.ascx" %>

最後に、ページのコード ビハインドには、上記の @Control ディレクティブの属性で定義されたLoadControlメソッドとタイプの使用を介してプログラムでコントロールのインスタンスを追加するコードが含まれます。MyUserControlclassName

protected void Page_Load(object sender, EventArgs e)
{
    var control = (ASP.MyUserControl)LoadControl("~/Controls/UserControlFile.ascx");
    control.vhText = "1";
    Page.Controls.Add(control);

    control = (ASP.MyUserControl)LoadControl("~/Controls/UserControlFile.ascx");
    control.vhText = "2";
    Page.Controls.Add(control);

    /* etc... */
}

それはあなたを正しい方向に向けるはずです...

于 2013-03-18T15:26:32.653 に答える
0

LoadControl メソッドを使用する必要があります。

MyUserControl control = (MyUserControl)Page.LoadControl("~/UserControlFile.ascx");
control.vhText = "first control";
Page.Controls.Add(control);

control = (MyUserControl)Page.LoadControl("~/UserControlFile.ascx");
control.vhText = "second control";
Page.Controls.Add(control);

control = (MyUserControl)Page.LoadControl("~/UserControlFile.ascx");
control.vhText = "third control";
Page.Controls.Add(control);
于 2013-03-18T15:09:13.700 に答える