2014-01-07 4 views
2

TestUC.ascx Design CodeКак пройти Textbox Value Present В UserControl до страницы ASPX ярлыком При нажатии кнопки в 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" /> 

Test.aspx Page Код

<%@ 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

I Need ..

Шаг1: Введите текст в текстовом поле
Шаг2: Затем я Click Click Button [Примечание: Это два элемента управления являются Bind от UserControl]
Step3: Что текст, введенный в текстовое поле Показать в ярлыке [Примечание Ярлык Present В Aspx Page]

ответ

1

Вам нужно будет иметь пользовательское событие & вам также необходимо выставить Text свойство TextBox в вашем UserControl, как это.

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); 
    } 
} 

Затем на странице ASPX, где вы разместили YourUserControl (OR вы динамически добавлять его из кода позади), вы можете подписаться на это событие, как это.

protected void Page_Load(Object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     yourUserControl.TextApplied += new YourUserControl.TextAppliedEventHandler(yourUserControl_TextApplied) 
    } 
} 

Вы можете использовать настраиваемое событие пользовательского элемента управления на своей странице следующим образом.

protected void yourUserControl_TextApplied(Object sender, EventArgs e) 
{ 
    yourLabelInYourPage.Text = yourUserControl.Text; 
} 

И вы сделали ...

EDIT: Вы можете переименовать элементы управления & события, как вам нравится. Я использовал имена только для примера.

EDIT: В веб-проектов, если вы хотите добавить свой пользовательский элемент управления динамически, то, вам, возможно, придется включать пространство имен ASP на странице, как это.

using ASP; 

И добавить этот Directive на вашей странице в ASPX разметке.

<%@ Reference Control="~/PathToYourUserControl/YourUserControl.ascx" %> 
+0

Привет, спасибо за ваше решение. Я только сейчас начинаю изучать Asp.net Так PLZ Скажите, какое имя я должен использовать в «YourUserControl» – Gurunathan

+0

Я использую ucTest для «yourUserControl» Это правильно или нет. Я получил ошибку в TextApplied Этот текст не существует в текущем контексте на странице Usercontrol. – Gurunathan

+0

Вы всегда можете назвать свои элементы управления и события по своему усмотрению. Я разместил имена только для примера. Для ошибки я только что отредактировал код. Это была в этой строке 'public event TextAppliedEventHandler ApplyTextClicked;' Замените его на 'public event TextAppliedEventHandler TextApplied; ' –

0

другое решение: создать событие в usercontrol, которое вызывается нажатием кнопки.

Подписаться на это событие в кодовой строке страницы aspx. таким образом вы можете обновить свой интерфейс, только если оно предоставлено.

немного сложнее, но вы можете повторно использовать эту логику для более сложной функции управления/родительского контроля в будущем.

я могу добавить фрагмент кода, если спросил

+0

Plz добавить фрагмент кода. Спасибо – Gurunathan

+0

Devraj Gadhavi отправил его в свой ответ – Bombinosh

0

Этот ответ подготовлен с помощью @Devraj Gadhavi i Edited Some Code.

UserControl Page Design Code

<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 Page Код

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 Page Design Code

<%@ 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; 

    } 
} 
0

Другой метод, если вы не хотите, чтобы обнажить Text свойство TextBox в вашем UserControl Просто используйте метод «UserControl.FindControl (» Идентификатор вашей Textbox который присутствует в пользовательском контроле ")" в вашем случае WebUserControlTest.FindControl ("txtbox1").

А ниже приведен более простой способ зарегистрировать обработчик событий в коде родительской веб-формы.

Код идет как ниже для родительской формы 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; 
} 
Смежные вопросы