如何通过在用户控件中单击按钮将用户控件中存在的文本框值传递给Aspx页面标签

时间:2014-01-07 15:08:28

标签: c# asp.net user-controls

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>

输出:

enter image description here

我需要..

步骤1:在文本框中输入一些文本
Step2:然后我点击Click Button [注意:这两个控件与UserControl绑定]
步骤3:TextBox中输入的文本显示在标签[Aspx页面中的注释标签]

5 个答案:

答案 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代码),然后从后面的代码中获取它的值。