Avatar billede lizardine Nybegynder
04. maj 2003 - 13:01 Der er 6 kommentarer og
1 løsning

Post/Postback fra en User Control i C#

Hey

Jeg sidder og bikser med User Controls i .Net frameworket.

I min løsning har jeg en aspx side der indeholder en henvisning til en User Control og en submit knap. I min User Control har jeg 2 tekst felter.

Det jeg ønsker er at lave en postback når jeg trykker på min submit knap. Dvs. de data jeg indtaster i User Control tekstfelterne bliver sendt til serveren og retuneret til klienten.

Hvis mit spørgsmål virker lidt forvirrende så spørg endelig :-)

Min forløbige kode ser således ud:


Webform1.aspx
-------------
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebApplication11.WebForm1" %>
<%@ Register TagPrefix="uc1" TagName="WebUserControl1" Src="WebUserControl1.ascx" %>

<html>
    <body>
        <form id="Form1" method="post" runat="server">
            <INPUT id="Button1" style="Z-INDEX: 101; LEFT: 62px; POSITION: absolute; TOP: 121px" type="button" value="Button" name="Button1" runat="server">
            <uc1:WebUserControl1 id="WebUserControl11" runat="server"></uc1:WebUserControl1>
        </form>
    </body>
</html>


Webform1.aspx.cs
----------------
using System;
using osv...

namespace WebApplication11
{
    /// <summary>
    /// Summary description for WebForm1.
    /// </summary>
    public class WebForm1 : System.Web.UI.Page
    {
        protected System.Web.UI.HtmlControls.HtmlInputButton Button1;
   
        private void Page_Load(object sender, System.EventArgs e)
        {
            // Put user code to initialize the page here
        }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {   
            this.Button1.ServerClick += new System.EventHandler(this.Button1_ServerClick);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        private void Button1_ServerClick(object sender, System.EventArgs e)
        {
            //Hvad skal der ske her ???   
        }
    }
}


Webusercontrol1.ascx
--------------------
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="WebUserControl1.ascx.cs" Inherits="WebApplication11.WebUserControl1" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>

<INPUT id="Text1" type="text" name="Text1" runat="server">
<INPUT id="Text2" type="text" name="Text2" runat="server">


Webusercontrol1.ascx.cs
-----------------------
namespace WebApplication11
{
    using System;
    using osv...

    /// <summary>
    ///        Summary description for WebUserControl1.
    /// </summary>
    public abstract class WebUserControl1 : System.Web.UI.UserControl
    {
        private System.Web.UI.Page page;

        protected System.Web.UI.HtmlControls.HtmlInputText Text1;
        protected System.Web.UI.HtmlControls.HtmlInputText Text2;

        public WebUserControl1(System.Web.UI.Page page)
        {
            this.page = page;
        }

        private void Page_Load(object sender, System.EventArgs e)
        {
            // Put user code to initialize the page here
        }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        ///        Required method for Designer support - do not modify
        ///        the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion
    }
}
Avatar billede finger Nybegynder
04. maj 2003 - 19:12 #1
lav din button som en asp:button istedet. så laver den automatisk postback når du klikker på den. i din page_load kan du så fange om det er postback eller ej og så tage de værdier eller hvad du nu vil fra din knap.

knappen:
<asp:Button id="btnLoad" runat="server" Text="Load"></asp:Button>

page_load:
if(IsPostBack)
{
regn på noget eller lign...
}
Avatar billede finger Nybegynder
04. maj 2003 - 19:12 #2
og det var et svar
Avatar billede finger Nybegynder
04. maj 2003 - 19:14 #3
eventhandleren skal ikke være button_Serverclick, men bare button_click
Avatar billede jakobg Nybegynder
11. maj 2003 - 10:25 #4
Du skal gøre følgende:
- ændre din submit (Button1) til <asp:button ...> (som finger pointerede)
- lave en reference til din control i Webform1.aspx.cs (protected variable)
- ændre de to input-felter i din control til <asp:text ...>
- lave 2 properties i din controls code-behind, som du kan sætte fra Webform1.aspx.cs i On_click eventen, og som derefter sætter indholdet af de to tekstfelter i din control.

Jeg kan strikke lidt VB.net kode sammen til dig, for at illustere det? Desværre har jeg ikke kodet C# endnu.
Avatar billede jakobg Nybegynder
11. maj 2003 - 11:09 #5
Jeg har lavet følgende kode, som burde løse din opgave:

webform1.aspx
##############################
<%@ Register TagPrefix="uc1" TagName="WebUserControl1" Src="WebUserControl1.ascx" %>
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="eksperten.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
    <HEAD>
        <title>WebForm1</title>
        <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
        <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body>
        <form id="Form1" method="post" runat="server">
            <P>
                <uc1:WebUserControl1 id="wucTextboxes" runat="server"></uc1:WebUserControl1></P>
            <P>
                <asp:Button id="Button1" runat="server" Text="Button"></asp:Button></P>
            <P>
                <asp:Label id="Label1" runat="server">Label</asp:Label></P>
        </form>
    </body>
</HTML>

webform1.aspx.vb
#########################
Public Class WebForm1
    Inherits System.Web.UI.Page
    Protected WithEvents Button1 As System.Web.UI.WebControls.Button
    Protected WithEvents Label1 As System.Web.UI.WebControls.Label
    Protected WithEvents wucTextboxes As WebUserControl1

#Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Put user code to initialize the page here
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Label1.Text = wucTextboxes.FirstText & "<br>" & wucTextboxes.SecondText
    End Sub
End Class
Avatar billede jakobg Nybegynder
11. maj 2003 - 11:14 #6
Og vi prøver igen, denne gang med HELE source-koden. Beklager... :)

' webform1.aspx
' #################################
<%@ Register TagPrefix="uc1" TagName="WebUserControl1" Src="WebUserControl1.ascx" %>
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="eksperten.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
    <HEAD>
        <title>WebForm1</title>
        <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
        <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body>
        <form id="Form1" method="post" runat="server">
            <P>
                <uc1:WebUserControl1 id="wucTextboxes" runat="server"></uc1:WebUserControl1></P>
            <P>
                <asp:Button id="Button1" runat="server" Text="Button"></asp:Button></P>
            <P>
                <asp:Label id="Label1" runat="server">Label</asp:Label></P>
        </form>
    </body>
</HTML>

' webform1.aspx.vb
' #################################
Public Class WebForm1
    Inherits System.Web.UI.Page
    Protected WithEvents Button1 As System.Web.UI.WebControls.Button
    Protected WithEvents Label1 As System.Web.UI.WebControls.Label
    Protected WithEvents wucTextboxes As WebUserControl1

#Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Put user code to initialize the page here
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Label1.Text = wucTextboxes.FirstText & "<br>" & wucTextboxes.SecondText
    End Sub
End Class



' webusercontrol1.ascx
' #################################
<%@ Control Language="vb" AutoEventWireup="false" Codebehind="WebUserControl1.ascx.vb" Inherits="eksperten.WebUserControl1" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<P>
    <asp:TextBox id="TextBox1" runat="server"></asp:TextBox></P>
<P>
    <asp:TextBox id="TextBox2" runat="server"></asp:TextBox></P>


' webusercontrol1.ascx.vb
' #################################
Public MustInherit Class WebUserControl1
    Inherits System.Web.UI.UserControl
    Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
    Protected WithEvents TextBox2 As System.Web.UI.WebControls.TextBox

#Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Put user code to initialize the page here
    End Sub

    Public Property FirstText() As String
        Get
            Return TextBox1.Text
        End Get
        Set(ByVal Value As String)
            TextBox1.Text = Value
        End Set
    End Property

    Public Property SecondText() As String
        Get
            Return TextBox2.Text
        End Get
        Set(ByVal Value As String)
            TextBox2.Text = Value
        End Set
    End Property

End Class

' #################################
Avatar billede lizardine Nybegynder
15. maj 2003 - 09:43 #7
Tak for hjælpen Jakobg og undskyld den lidt sene svar tid. Har været på ferie ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester