Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881

    Dropdownlist, Selectedindexchanged non regolare

    Questa non l'avevo ancora vista:
    una dropdownlist che sul selectedindexchanged una volta fa un postback e la seconda no, cioè ricarica la pagina ma nel pageload non lo rileva come postback... ma solo in firefox!


    Naturalmente nel markup la ddl ha scritto autopostback=true (altrimenti non andrebbe proprio)
    E la cosa da perdere i capelli è che in Chrome il debug fa il giro perfetto, in firefox invece il pageload una volta si e una no rileva che non si tratta di postback e mi genera altri problemi...
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    la pagina deve essere davvero complicata, perchè ho fatto una semplice prova e funziona perfettamente con IE11, Firefox e Chrome.
    E comunque, senza codice, cosa si può dire?


    Pietro

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    in effetti non è semplice da riassumere...
    la pagina ha una multiview: la defaultview presenta un elenco di preventivi cliccando ognuno dei quali si viene ri-indirizzati alla pagina stessa ma con un parametro in querystring (vecchio asp style).
    Torno quindi alla pagina con un parametro in querystring (ispostback=false), si viene posizionati in una view diversa con il dettaglio di un preventivo (la sua ultima versione) e vengono caricati i listitem di una dropdownlist con le diverse versioni del preventivo.
    Ad ogni selectedindexchanged di questa ddl veine fatto un postback con rilettura dei dati del preventivo relativi alla versione selezionata, quindi la view si aggiorna con i dati della versione scelta.
    Ecco, con Chrome questo succede sempre (ispostback sempre true), con Firefoz funziona a volte alterne: in debug vedo che la prima volta lo fa (ispostback=true) e carica i dati della versione selezionata, la seconda invece lo fa ricaricando la pagina (ispostback = false) e infatti mi ripropone l'ultima versione del preventivo anzichè quella selezionata.

    Ho 1800 righe di codice in markup e 2700 in codebehind, provo a sintetizzare
    codice:
    <%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/_Admin/_admin.Master" CodeBehind="preventivi.aspx.vb" Inherits="WEBORDINI.preventivi" ValidateRequest="false" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"></asp:Content>
    
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
       <asp:HiddenField ID="HFIDprev" runat="server" />
       <asp:HiddenField ID="HFnprev" runat="server" />
    
        <asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="3">
            
            <asp:View runat="server" ID="inserimento">
                <asp:DropDownList ID="versioni"  ClientIDMode="Static" CssClass="form-control maxw250" runat="server" OnSelectedIndexChanged="versioni_SelectedIndexChanged" AutoPostBack ="true"></asp:DropDownList>
    
                <div class="col-xs-12 col-md-6">
                    <asp:TextBox ID="cliente" ClientIDMode="static" runat="server" TextMode="MultiLine" placeholder="Dati del cliente *" Rows="5" ValidationGroup="mcins"></asp:TextBox>
                </div>
                <div class="col-xs-12 col-md-6">
                    <div class="col-xs-6 col-md-4" style="height: 30px; padding: 6px 0px 0px 10px;">Validità offerta:</div>
                    <div class="col-xs-6 col-md-8">
                        <asp:TextBox ID="val_offerta" runat="server" MaxLength="20" CssClass="bgc"></asp:TextBox>
                    </div>
                    ....
                </div>
                ...
                <div class="col-xs-12">
                    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                        <ContentTemplate>
    
                                <table id="schemaprezzi" class="macbtab">
                                    <tr>
                                        ... varie righe e vari campi che si aggiornano a vicenda all'interno dell'update panel
                                       <td><asp:TextBox ID="X0_note" runat="server" MaxLength="15"></asp:TextBox></td>
                                    </tr>
                                </table>
                            </div>
    
                        </ContentTemplate>
                    </asp:UpdatePanel>
                </div>
    
    
                <div class="row" style="text-align: center;">
                    <asp:Button ID="btnok" runat="server" Text="Conferma i dati" ClientIDMode="Static" OnClick="btnok_Click" CausesValidation="true" ValidationGroup="mcins"  />
                    ...
                </div>
    
            </asp:View>
    
            <asp:View runat="server" ID="conferma"> ......    </asp:View>
    
            <asp:View runat="server" ID="firma"> .........    </asp:View>
    
            <asp:View ID="elenco" runat="server">
                <h1>Elenco Preventivi"></h1>
                <asp:Repeater ID="rordini" runat="server" EnableViewState="true">
                    <HeaderTemplate>
                        <table class="table mactab gridtable">
                           <tr> .....</tr>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <tr class="borderrow">
                            <td><asp:Label ID="r_ID" runat="server" Text='<%# Eval("ID") %>' Visible="false"></asp:Label></td>
                            <td>
                                <asp:Label ID="r_numprev" runat="server" Text='<%#  Eval("c_numprev")%>'></asp:Label></td>
                            <td>
                                <asp:LinkButton ID="lb_data" Text='<%# String.Format("{0:dd/MM/yy HH:mm}", Eval("c_data")) %>' CommandName="seleziona" ToolTip="Vedi" runat="server" Style="color: #333 !important; font-weight: bold;"></asp:LinkButton>
                            </td>
                            <td>
                                <asp:Label ID="r_cliente" runat="server" Text='<%# Eval("c_cliente") %>'></asp:Label>
                            </td>
                            <td>
                                'vari imagebutton per vedere (commandname="seleziona")  /duplicare/eliminare il preventivo elencato
                            </td>
                        </tr>
    
                    </ItemTemplate>
                    <FooterTemplate>
                        </table>
                    </FooterTemplate>
                </asp:Repeater>
            </asp:View>
    
    
        </asp:MultiView>
    </asp:Content>
    
    
    
    
    
    
    codebehind
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            If "" & Request("IDprev") <> "" Then
                Dim IDprev As String = Request("IDprev")
                HFIDprev.Value = IDprev
                
                'seleziono il preventivo e compilo tutti i campi della view 
                'in base all'id del preventivo ricevuto in querystring
                recuperadati(IDprev)
                
                'popolo dll versioni: il valore HFnprev.value è appena stato aggiornato dalla recuperadati!
                popoladdlrelease(Int(HFnprev.Value))
                
                'e switcho sulla view corretta
                MultiView1.SetActiveView(MultiView1.Views(0))
            Else
                'crea elenco preventivi della view(3)
                ...
            End If
    
        End If
    End sub
    
    'itemcommand di una riga dell'elenco preventivi nella view(3)
    Protected Sub rordini_ItemCommand(source As Object, e As RepeaterCommandEventArgs) Handles rordini.ItemCommand
        Dim rI As RepeaterItem = rordini.Items(e.Item.ItemIndex)
        Dim Idprev As Integer = Int(DirectCast(rI.FindControl("r_ID"), Label).Text)
        Dim numprev As Integer = Int(DirectCast(rI.FindControl("r_numprev"), Label).Text)
    
        If e.CommandName.ToLower().Equals("seleziona") Then
            Response.Redirect("preventivi.aspx?&idprev=" & Idprev)
        End If
        ....
    end sub
    
    'preparo i listitem della ddl
    Protected Sub popoladdlrelease(ByVal nprev As Integer)
        Dim cn = New System.Data.SqlClient.SqlConnection(...)
        Using cn
            cn.Open()
            Dim strsql = "SELECT ID,c_Data FROM preventivi WHERE c_numprev =" & nprev & " ORDER BY c_data desc"
            Dim cmd As New SqlCommand(strsql, cn)
            Dim rs As SqlDataReader = cmd.ExecuteReader()
            If rs.HasRows Then
                Dim dtt As New DataTable
                dtt.Load(rs)
                If dtt.Rows.Count > 1 Then
                    versioni.Items.Clear()
                    For Each row In dtt.Rows
                        versioni.Items.Add(New ListItem(String.Format("{0:dd/MM/yy HH:mm}", row.item("c_data")), row.item("ID")))
                    Next
                    versioni.SelectedValue = HFIDprev.Value
                End If
    
            End If
        End Using
    End Sub
    
    'selezione di una voce dalla dropdown delle versioni  
    Protected Sub versioni_SelectedIndexChanged(sender As Object, e As EventArgs)
        Dim ddl As DropDownList = sender
        Dim idvers As Integer = ddl.SelectedValue
        recuperadati(idvers)
        If ddl.SelectedIndex > 0 Then
            'è una versione precedente e non devo permettere le modifiche
            'lavoro lato client per enabled/disabled dei campi, qui nascondo solo il bottone salva
            btnok.Visible = False
        Else
            btnok.Visible = True
        End If
    End Sub
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    dimenticavo:
    siccome nella popoladdlrelease è indicato che il selectedvalue deve essere impostato leggendolo da un hiddenfield, quell'hiddenfield viene valorizzato quando ricevo in querystring un IDprev ma anche all'interno della recuperadati, con il parametro ricevuto
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    le pagine devono essere SEMPLICI....

  6. #6
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    Eh sì l'ho già sentita questa raccomandazione :-)
    cmq sto migliorando, in passato ho fatto ben di peggio, questa è quasi "lineare" nel suo funzionamento... a parte i comportamenti esotici di quella ddl
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    il problema è che i componenti non sono perfetti e presentano comportamenti anomali gia' singolarmente...

    se poi li leghi troppo, gli uni agli altri, ottieni roba da Star Wars: Episodio XXIII


    L'unica soluzione che vedo è smontare pezzo per pezzo e vedere dov'e' l'inghippo...

  8. #8
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    sob
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.