0

updatePanelのページがあります。

<asp:UpdatePanel runat="server" ID="up1" UpdateMode="Conditional" OnLoad="up1_Load">
  <ContentTemplate>
  </ContentTemplate>
</asp:UpdatePanel>

ユーザーコントロールもあります(この例では、ここでは大幅に簡略化されています)...

UserControlマークアップ:

<%@ Control Language="vb" AutoEventWireup="false" Codebehind="CtlParts.ascx.vb" Inherits="myProj.myProj.UserControls.ctlParts" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>  
<asp:textbox runat="server" id="txtTest"></asp:textbox>

ユーザーコントロールを更新パネルに動的に追加しようとしています(このガイドに従ってください)...。

フォームVB

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim ctl As New UserControls.ctlParts
    ctl.ID = "ctlParts1"
    up1.ContentTemplateContainer.Controls.Add(ctl)
End Sub

エラーがないため、機能しているように見えます。更新パネルのロードイベントでユーザーコントロール自体にアクセスできます。

フォームVB

Public Sub up1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles up1.Load  
         'Finds this control ok
         Dim ctl As UserControls.ctlParts = DirectCast(sender, System.Web.UI.UpdatePanel).FindControl("ctlParts1") 
         ctl.getTextBoxContent()    
    End Sub

ただし、usercontrolのどのコントロールにもアクセスできません。

ユーザーコントロールVB

Public Sub getTextBoxContent()
    return txtTest.text 'This throws an error- txtTest is nothing
End Sub

なぜこれが起こっているのか、誰もが何か考えを持っています。私は何が間違っているのですか?

4

1 に答える 1

0

私は解決策を見つけました。

LoadControlメソッドを使用する必要があります。したがって、Page_Loadでは:

Dim ctl As UserControls.ctlParts=CType(LoadControl("ctlParts.ascx"), ctlParts)

(これが誰かを助けることを願っています。)

于 2013-10-07T10:33:05.510 に答える