none
ASP-TextBox Evénement Client-Side onchange

    Question

  • Bonjour,

    Pour une application web ASP.Net, je recherche un moyen de pouvoir tester si le contenu d'une TextBox a été changé :

    Si Oui, je voudrais afficher une boite de message offrant la possibilité à l'utilisateur de choisir de continuer ou non : "Vous avez modifié un libellé multi-langue, voulez vous recréer un libellé et le retraduire ?"

    Le résultat du choix de l'utilisateur m'intéresse Côté serveur pour la suite de mon traitement...

    J'ai imaginé utilisé du javascript (comme je l'avais déjà fait sur le bouton delete).

    TB étant un TextBox :

    TB.Attributes.Add("onchange", "if (!confirm('Vous avez modifié un libellé multi-langue, voulez vous recréer un libellé et le retraduire ?')) return false;")

    Mais de toute façon, ceci ne compare pas l'ancienne valeurr de mon TextBox, ça n'annule pas l'événement et je ne vois pas comment connaitre le choix de l'utilisateur côté serveur...

    Quelqu'un a t'il une piste svp?


    FB

    mardi 26 mars 2013 07:39

Réponses

  • Je n'ai pas compris pourquoi je n'y arrivais pas... Du coup, j'ai fait comme ça :

    <script type="text/javascript">
    
        function checkModif() {
            var a = document.getElementById('<%=TB.ClientID%>');
            var b = '<%=Libelle%>';
            alert(b);
    
            if (a.innerText != b) {
                if (!confirm('Vous avez modifié un libellé multi-langue, voulez vous recréer un libellé et le retraduire ?'))
                { a.innerText = b; }
            }
        }
    
    </script>

    Et Côté serveur :

        Dim m_Libelle As String
        Property Libelle() As String
            Get
                Libelle = m_Libelle
            End Get
            Set(ByVal value As String)
                m_Libelle = value
                TB.Text = value
                Lab.Text = value
            End Set
    
        End Property
    
    Public Property Index() As Integer
            Get
                Return indexValue
            End Get
            Set(ByVal value As Integer)
                indexValue = value
            End Set
        End Property
    
        Public Property IndexInViewState() As Integer
            Get
                Dim obj As Object = ViewState("IndexInViewState")
                If obj Is Nothing Then obj = 0
                Return CInt(obj)
            End Get
            Set(ByVal value As Integer)
                ViewState("IndexInViewState") = value
            End Set
        End Property
    
        Protected Overrides Sub OnInit(ByVal e As EventArgs)
            MyBase.OnInit(e)
            Page.RegisterRequiresControlState(Me)
        End Sub
    
        Protected Overrides Function SaveControlState() As Object
    
            Dim obj As Object = MyBase.SaveControlState()
    
            If indexValue <> 0 Then
                If obj IsNot Nothing Then
                    Return New Pair(obj, indexValue)
                Else
                    Return indexValue
                End If
            Else
                Return obj
            End If
        End Function
    
        Protected Overrides Sub LoadControlState(ByVal state As Object)
            If (state IsNot Nothing) Then
                Dim p As Pair = TryCast(state, Pair)
                If p IsNot Nothing Then
                    MyBase.LoadControlState(p.First)
                    indexValue = CInt(p.Second)
                Else
                    If (TypeOf (state) Is Integer) Then
                        indexValue = CInt(state)
                    Else
                        MyBase.LoadControlState(state)
                    End If
                End If
            End If
        End Sub


    FB

    mercredi 27 mars 2013 14:11

Toutes les réponses

  • mercredi 27 mars 2013 07:07
    Propriétaire
  • Je n'y arrive pas... Je crois que le problème vient du fait que j'utilise  un contrôle utilisateur 2 fois dans la page...

    Voici mon code coté client :

    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="TradLib_S.ascx.vb" Inherits="TradLib_S"  %>
    <script type="text/javascript">
    
        function checkModif() {
            var a = document.getElementById('<%=TB.ClientID%>');
            var b = document.getElementById('<%=TBHidden.ClientID%>');
             
    if (a.innerText != b.value) { if (!confirm('Vous avez modifié un libellé multi-langue, voulez vous recréer un libellé et le retraduire ?')) {a=b; } } } </script> <asp:HiddenField runat="server" ID="TBHidden" /> <asp:TextBox ID="TB" runat="server" Columns="60" Rows="7" TextMode="MultiLine" AutoCompleteType= "None" onchange="checkModif() ;" ></asp:TextBox> <asp:Label ID="Lab" runat="server" Visible="false" ></asp:Label> <table class="Contextstyle" runat="server" id="Liens"> <tr > <td align="left"> <a runat="server" id="LnkTraduit" >Gestion multi-langue</a> </td> <td align="right" ><asp:LinkButton ID="LnkClear" runat="server" CausesValidation="False" CommandName="Clear" Text="Effacer"></asp:LinkButton></td> </tr> </table>

    Et coté serveur je renseigne le hidden field via cette propriété :
        Property Libelle() As String
            Get
                Libelle = nvl(TB.Text, Lab.Text)
            End Get
            Set(ByVal value As String)
                TBHidden.Value = value
                TB.Text = value
                Lab.Text = value
            End Set
    
        End Property


    FB



    mercredi 27 mars 2013 13:48
  • Je n'ai pas compris pourquoi je n'y arrivais pas... Du coup, j'ai fait comme ça :

    <script type="text/javascript">
    
        function checkModif() {
            var a = document.getElementById('<%=TB.ClientID%>');
            var b = '<%=Libelle%>';
            alert(b);
    
            if (a.innerText != b) {
                if (!confirm('Vous avez modifié un libellé multi-langue, voulez vous recréer un libellé et le retraduire ?'))
                { a.innerText = b; }
            }
        }
    
    </script>

    Et Côté serveur :

        Dim m_Libelle As String
        Property Libelle() As String
            Get
                Libelle = m_Libelle
            End Get
            Set(ByVal value As String)
                m_Libelle = value
                TB.Text = value
                Lab.Text = value
            End Set
    
        End Property
    
    Public Property Index() As Integer
            Get
                Return indexValue
            End Get
            Set(ByVal value As Integer)
                indexValue = value
            End Set
        End Property
    
        Public Property IndexInViewState() As Integer
            Get
                Dim obj As Object = ViewState("IndexInViewState")
                If obj Is Nothing Then obj = 0
                Return CInt(obj)
            End Get
            Set(ByVal value As Integer)
                ViewState("IndexInViewState") = value
            End Set
        End Property
    
        Protected Overrides Sub OnInit(ByVal e As EventArgs)
            MyBase.OnInit(e)
            Page.RegisterRequiresControlState(Me)
        End Sub
    
        Protected Overrides Function SaveControlState() As Object
    
            Dim obj As Object = MyBase.SaveControlState()
    
            If indexValue <> 0 Then
                If obj IsNot Nothing Then
                    Return New Pair(obj, indexValue)
                Else
                    Return indexValue
                End If
            Else
                Return obj
            End If
        End Function
    
        Protected Overrides Sub LoadControlState(ByVal state As Object)
            If (state IsNot Nothing) Then
                Dim p As Pair = TryCast(state, Pair)
                If p IsNot Nothing Then
                    MyBase.LoadControlState(p.First)
                    indexValue = CInt(p.Second)
                Else
                    If (TypeOf (state) Is Integer) Then
                        indexValue = CInt(state)
                    Else
                        MyBase.LoadControlState(state)
                    End If
                End If
            End If
        End Sub


    FB

    mercredi 27 mars 2013 14:11