asp.net 在用户控件中设置TextBox文本

mzillmmw  于 2023-06-25  发布在  .NET
关注(0)|答案(1)|浏览(145)

在我的aspx页面上我有一个div

<div id="MatterRiskControl" runat="server" />

在aspx页面后面的代码中,我登录相关控件,如下所示

uc = CType(Page.LoadControl("MatterRisk_Probate.ascx"), UserControl)
MatterRiskControl.Controls.Add(uc)

这工作得很好,虽然我有一个文本框,我想设置的文本在后面的代码。在我的ascx页面中,文本框是这样设置的

<dx:ASPxTextBox ID="MyTextBox" runat="server" />

在ascx页面后面的页面加载代码中,我已经尝试过这个

MyTextBox.Text = "Some Text Here"

但它并没有设置它。
我不确定如何从后面的aspx代码引用TextBox?
感谢您的任何帮助!

rdlzhqv9

rdlzhqv91#

让我们假设一个UC有一大堆控件(文本框、复选框),所有有趣的东西。
简短版本:
创建UC的公共方法以更改所需的文本框。
造成这种情况的原因有很多,但主要原因是您希望设计支持控件的多个示例。
因此,公开公共方法。
说这个UC编辑酒店。

<h3>UC testing page</h3>

        Enter ID to show: 
        <asp:TextBox ID="txtHotelID" runat="server"></asp:TextBox>
        <asp:Button ID="cmdShow" runat="server" Text="Show Hotel"
            CssClass="btn"
            OnClick="cmdShow_Click"
            />
        <br />
        <br />

        <uc1:MyEditHotelC runat="server" 
            ID="MyEditHotelC" />
        <br />

        <div style="clear:both"></div>
        <hr />
        <h3>This page button(s)</h3>
        Enter new hotel text: 
        <asp:TextBox ID="txtMyHotel" runat="server">
        </asp:TextBox>
        <asp:Button ID="cmdChangeHotel" runat="server" Text="Change HotelName"
            OnClick="cmdChangeHotel_Click"
            />
    </div>

注意UC。
所以,我们有这个:

所以,在UC,我们这样做:

Public Sub ChangeHotel(strText As String)

    Me.txtHotel.Text = strText

End Sub

注意,在上面,我们可以使用相同的控件名称来表示后面的表单上的文本框,但是txtBox控件在呈现时将被UC更改。
所以,当前页面中的代码:

Protected Sub cmdChangeHotel_Click(sender As Object, e As EventArgs)

    MyEditHotelC.ChangeHotel(txtMyHotel.Text)

End Sub

所以,请注意我们如何制作/使用/享受UC的公共方法,从而在当前页面上我们可以轻松抓取/获取/更改文本框控件。
如果你需要读取/使用文本框值,你可以很好地创建一个getter/setter。
所以,上面可能会变成这样:

Public Property tHotel
    Get
        Return txtHotel.Text
    End Get

    Set(value)
        txtHotel.Text = value
    End Set
End Property

同样,由于页面上可能存在2或5个控件副本,那么您在这里更改文本框的哪一个副本?
所以,我可以在页面上更新/更改2 UC的酒店名称,就像这样:

<uc1:MyEditHotelC runat="server" 
            ID="MyEditHotelC" />
        <br />

        <uc1:MyEditHotelC runat="server" 
            ID="MyEditHotelC2" />
        <br />

所以,现在代码更改酒店都将是这样的:

Protected Sub cmdChangeHotel_Click(sender As Object, e As EventArgs)

    MyEditHotelC.tHotel = txtMyHotel.Text
    MyEditHotelC2.tHotel = txtMyHotel.Text

End Sub

所以,如果你只需要获取值,那么在UC代码后面创建一个公共函数。
但是,如果你需要获取和设置该文本框,那么按照上面的方法公开一个公共属性,然后你就可以更改文本了。
更令人惊讶的是,这些值在标记中是有效的:
例如:

<uc1:MyEditHotelC runat="server" 
            ID="MyEditHotelC2"
            tHotel ="ABC"
            />

所以,就像一个Gridview与一个文本框一样?那么,当您有10行时,您处理的是文本框的哪个示例?
UC也是如此。如果页面上有5个文本框,您将获取、抓取并更改哪个文本框?
因此,将Text hotel框的多个示例分开的唯一真正方法是公开每个控件的getter和setter。
现在,你当然可以在客户端JavaScript中获得控件,并更改它,但目前,这篇文章有点长,上面的内容应该有助于一些我发现工作相当好的方法的好例子。

相关问题