TestUC.ascx设计代码
<asp:TextBox ID="txtbox1" runat="server" ClientIDMode="Static" placeholder="Enter Some Text" ></asp:TextBox><br />
<asp:Button ID="btn1" runat="server" Text="Click" OnClick="btn1_Click" ClientIDMode="Static" />
Test.aspx页码
<%@ Register Src="~/WebUserControls/TestUC.ascx" TagName="WebUserControlTest"
TagPrefix="uctest" %>
<asp:Content ID="Content1" ContentPlaceHolderID="cphBody" runat="server">
<asp:Label ID="lbl1" runat="server" >Label</asp:Label>
<uctest:WebUserControlTest ID="ucTest" runat="server"></uctest:WebUserControlTest>
</asp:Content>
输出:
我需要..
步骤1:在文本框中输入一些文本
Step2:然后我点击Click Button
[注意:这两个控件与UserControl绑定]
步骤3:TextBox中输入的文本显示在标签[Aspx页面中的注释标签]
答案 0 :(得分:1)
您需要有一个自定义事件&amp;您还需要在UserControl中公开Text
的{{1}}属性,如下所示。
TextBox
然后在您的aspx页面中,您放置了public partial class YourUserControl : UserControl
{
public String Text
{
get
{
return this.txtBox1.Text;
}
//write the setter property if you would like to set the text
//of the TextBox from your aspx page
//set
//{
// this.txtBox1.Text = value;
//}
}
public delegate void TextAppliedEventHandler(Object sender, EventArgs e);
public event TextAppliedEventHandler TextApplied;
protected virtual void OnTextApplied(EventArgs e)
{
//Taking a local copy of the event,
//as events can be subscribed/unsubscribed asynchronously.
//If that happens after the below null check then
//NullReferenceException will be thrown
TextAppliedEventHandler handler = TextApplied;
//Checking if the event has been subscribed or not...
if (handler != null)
handler(this, e);
}
protected void yourUserControlButton_Click(Object sender, EventArgs e)
{
OnTextApplied(EventArgs.Empty);
}
}
(或者您正在从后面的代码中动态添加它),您可以像这样订阅此事件。
YourUserControl
您可以在页面中使用用户控件的自定义事件。
protected void Page_Load(Object sender, EventArgs e)
{
if (!IsPostBack)
{
yourUserControl.TextApplied += new YourUserControl.TextAppliedEventHandler(yourUserControl_TextApplied)
}
}
你完成了......
编辑:您可以重命名控件&amp;你喜欢的事件。我仅将这些名称用于示例目的。
编辑:在网站项目中,如果要动态添加用户控件,
您可能需要在页面中包含名称空间protected void yourUserControl_TextApplied(Object sender, EventArgs e)
{
yourLabelInYourPage.Text = yourUserControl.Text;
}
,如下所示。
ASP
并在页面中的aspx标记中添加此using ASP;
。
Directive
答案 1 :(得分:0)
其他解决方案:在usercontrol中创建一个事件,在按钮单击中调用该事件。
在aspx页面的代码隐藏中订阅此事件。这样,只有在提供值时才能更新界面。
稍微复杂一些,但您可以在将来重复使用此逻辑来实现更复杂的控制/父控制功能。
我可以在询问时添加代码段
答案 2 :(得分:0)
这个答案是由@Devraj Gadhavi的帮助编写的,我编写了一些代码。
UserControl页面设计代码
<asp:TextBox ID="txtbox1" runat="server" ClientIDMode="Static" placeholder="Enter Some Text" ></asp:TextBox><br />
<asp:Button ID="btn1" runat="server" Text="Click" OnClick="btn1_Click" ClientIDMode="Static" />
UserControl页码
public partial class TestUC : System.Web.UI.UserControl
{
public String Text
{
get
{
return this.txtbox1.Text;
}
}
public delegate void TextAppliedEventHandler(Object sender, EventArgs e);
public event EventHandler TextApplied;
protected virtual void OnTextApplied(EventArgs e)
{
if (TextApplied != null)
TextApplied(this, e);
}
protected void btn1_Click(object sender, EventArgs e)
{
OnTextApplied(EventArgs.Empty);
}
}
Aspx页面设计代码
<%@ Register Src="~/WebUserControls/TestUC.ascx" TagName="WebUserControlTest"
TagPrefix="uctest" %>
<asp:Content ID="Content1" ContentPlaceHolderID="cphBody" runat="server">
<asp:Label ID="lbl1" runat="server" >Label</asp:Label>
<uctest:WebUserControlTest ID="ucTest" runat="server"></uctest:WebUserControlTest>
</asp:Content>
Aspx Cs文件代码
public partial class Test2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ucTest.TextApplied += new EventHandler(ucTest_TextApplied);
}
protected void ucTest_TextApplied(Object sender, EventArgs e)
{
lbl1.Text = ucTest.Text;
}
}
答案 3 :(得分:0)
另一种方法,如果您不想在UserControl中公开TextBox的Text属性,请使用方法&#34; UserControl.FindControl(&#34;用户控件中存在的文本框的ID #34;)&#34;在你的Case WebUserControlTest.FindControl中(&#34; txtbox1&#34;)。
以下是在父网页表单背后注册事件处理程序的简单方法。
代码如下所示为父表格asxp.cs
protected override void OnInit(EventArgs e)
{
//find the button control within the user control
Button button = (Button)WebUserControlTest.FindControl("btn1");
//wire up event handler
button.Click += new EventHandler(button_Click);
base.OnInit(e);
}
void button_Click(object sender, EventArgs e)
{
TextBox txt = (TextBox) WebUserControlTest.FindControl("txtbox1");
//id of lable which is present in the parent webform
lblParentForm.Text=txt.text;
}
答案 4 :(得分:0)
此外,您可以使用下面的JavaScript来实现此目的(上面提供了您的代码):
<script type="text/javascript">
function getUCTextboxValue() {
let txtName = document.getElementById('<%=ucTest.FindControl("txtbox1").ClientID %>');
let lbl = document.getElementById('<%=lbl1.ClientID %>');
lbl.innerText = txtName.value
}
此外,您还可以在父页面上添加一个HiddenField并将文本框值保存在上面(使用上面的JavaScript代码),然后从后面的代码中获取它的值。