1

プログラムで 2 番目のユーザー コントロールを数回含むユーザー コントロールがありますが、最終的に、コントロールの HTML がまったく生成されません。

デフォルト.aspx

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="TestApplication._Default" %>
<%@ Register TagName="Ten" TagPrefix="me" Src="~/Ten.ascx" %>

<html>
<head runat="server"></head>
<body>
    <form id="form1" runat="server">
        <me:Ten ID="thisTen" runat="server" />
    </form>
</body>
</html>

Ten.ascx

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="Ten.ascx.vb" Inherits="TestApplication.Ten" %>

<asp:Panel ID="List" runat="server"></asp:Panel>

Ten.ascx.vb

Public Class Ten
    Inherits System.Web.UI.UserControl
    Protected Sub Page_Init() Handles Me.Init
        For I As Integer = 0 To 11
            List.Controls.Add(New One(I.ToString))
        Next
    End Sub
End Class

One.ascx

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="One.ascx.vb" Inherits="TestApplication.One" %>

<asp:Button ID="OneButton" Text="Press ME!" runat="server" />

One.ascx.vb

Public Class One
    Inherits System.Web.UI.UserControl
    Private _number As String
    Sub New(ByVal number As String)
        _number = number
    End Sub
    Protected Sub OneButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles OneButton.Click
        Dim script As String = "<script type=""text/javascript"">" +
                               "alert('Button " + _number + "');" +
                               "</script>"
        ScriptManager.RegisterStartupScript(Me, Me.GetType(), "ServerControlScript", script, True)
    End Sub
End Class

編集:

負荷制御 (Ten.aspx) の使用

Dim p() As String = {I.ToString}
Dim o As One = Me.LoadControl(New One("").GetType, p)
List.Controls.Add(o)

編集2:

Dim o As One = Me.LoadControl("~/One.ascx")
o._number = I.ToString
List.Controls.Add(o)
4

1 に答える 1

1

OnInit イベントではこの操作を実行しませんが、これは問題に関連している場合とそうでない場合があります。代わりに、OnLoad イベントでコントロールをロードします。

ただし、newキーワードの使用は、通常、ユーザー コントロールの読み込み方法ではありません。申し訳ありませんが、私は C# しか知らないので、正確な翻訳はわかりません:

C# の場合:

One one = (One)this.LoadControl("~/Controls/One.ascx");

これは VB.NET で正しく表示されますか?

Dim one As One = Me.LoadControl("~/Controls/One.ascx")

コントロールをロードした後、コンストラクターを削除し、プロパティを設定する必要があります。

于 2012-07-10T04:12:27.940 に答える