好吧,让我们假设一个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。
因此,我们有这样的:
因此,在加州大学,我们这样做:
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"
/>
那么,就像一个只有一个文本框的网格视图一样?好吧,当你有10行时,你要处理文本框的哪个实例?
UC也是如此。如果你的页面上有5个,你会得到哪个文本框,抓取,然后更改?
因此,将Text hotel框的多个实例分开的唯一真正方法是公开每个控件的getter和setter。
现在,你当然可以在客户端JavaScript中获得控制权,并对其进行更改,但就目前而言,这篇文章有点长,上面的内容应该有助于提供一些我认为效果相当好的方法的好例子。