944 messaggi dal 11 febbraio 2013
Ho trovato questo esempio (https://forums.asp.net/t/2009414.aspx?how+to+integrate+turn+js+in+asp+net+) che integra turnJs in asp.net

questo esempio usa uno webmethod "richiamato" da jquery ...

ora mi chiedo se non sia meglio nel page load scrivere nel page_load

string path = HttpContext.Current.Server.MapPath("~/PATH/");
        if (path.EndsWith("\\"))
        {
            path = path.Remove(path.Length - 1);
        }
        Uri pathUri = new Uri(path, UriKind.Absolute);
        string[] files = Directory.GetFiles(path);
        
        foreach (string file in files)
        {
            Uri filePathUri = new Uri(file, UriKind.Absolute);
            string ImagePath = pathUri.MakeRelativeUri(filePathUri).ToString();

            String myPath = filePathUri.ToString();
            myPath = myPath.Substring(myPath.IndexOf("BROCHURE"));

            Panel p = new Panel();
            p.Style.Add("background-image","url(" + myPath + ")");
            MyflipBook.Controls.Add(p);


Faccio questa domanda perchè entrambi i modi funzionano tuttavia non so valutare tra i due

grazie

ps: scusate se non sono preciso nella terminologia
59 messaggi dal 17 maggio 2010
Ciao,
sono due comportamenti diversi. Il senso di fare una chiamata ajax è quello di evitare di ricaricare l'intera pagina, quindi aggiornare i dati in background. Se tu usi il webmethod, puoi chiamarlo con ajax senza dover ricaricare la pagina, mentre se usi il Page_Load questo funzionerà solo ricaricando tutta la pagina.
Ad esempio immagina se l'utente vuole scegliere una determinata cartella da "sfogliare", se tu usi il Page_Load l'utente deve caricare una prima volta la pagina, ma ancora non sai che cartella vuole vedere, per cui sarà costretto a scegliere la cartella e dopo ricaricare di nuovo tutta la pagina. Con il WebMethod invece fai scegliere all'utente e carichi solo i dati senza dover ricaricare tutta la pagina.
944 messaggi dal 11 febbraio 2013
Nel mio caso però faccio scegliere all'utente delle sezioni in una pagina
poi con server.transfer e con Session passo "la scelta" ad un altra pagina...

forse in questo caso è indifferente ?

grazie infinite
59 messaggi dal 17 maggio 2010
Aspetta, magari sono io che non ho capito... io mi riferisco al fatto che una cosa inserita nel Page_Load ha un senso, mentre con un webmethod ne ha un altro.
Mispiego meglio:
Il Page_Load viene chiamato quando carichi la pagina, ne conviene che quel codice verrà eseguito solo una volta nella vita della pagina.
Ora supponiamo che tu debba elencare i file dentro una cartella, metti nel Page_Load il caricamento dei dati e li associ ai vari controlli. Chiaramente appena l'utente chiama la pagina viene chiamato il Page_Load, che carica i dati di una cartella, quale? ancora non lo sai, quindi o ne carichi una a caso o eviti il caricamento e aspetti che ci sia un postback per dare il tempo all'utente di scegliere la cartella. In ogni caso i dati li carichi solo al caricamento della pagina, quindi dovrai per forza richiamare e ricaricare tutta la pagina per forza.
Nel caso del webmethod è una situazione diversa, infatti la pagina viene caricata solo una volta, ovvero quando l'utente la richiede, mentre una volta che ha scelto la cartella non farà più un postback, ma una chiamata ajax che lavorerà in backgroud ed andra ad interrogare il webmethod del server, che a sua volta restituirà l'elenco dei file. In tutto ciò l'utente non ha mai cambiato pagina, al contrario del precedente caso che carica due volte la pagina (primo caricamento e dopo la scelta).
944 messaggi dal 11 febbraio 2013
No sei stato chiarissimo...

se hai un esempio me lo studio altrimenti non importa...mi sei già stato di aiuto

grazie e buon lavoro
59 messaggi dal 17 maggio 2010
Ciao,
ok:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication2
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        static string[] list = new string[] { "Giorgio", "Pietro", "Rino", "Pino", "Gino", "Mario", "Giovanni", "Ivo", "Marco" };

        protected void Page_Load(object sender, EventArgs e)
        {
            //conto il numero di volte che è stata chiamata la pagina
            if (Session["PageLoadCount"] == null)
                Session["PageLoadCount"] = 0;
            Session["PageLoadCount"] = ((int)Session["PageLoadCount"])+1;
            //scrivo a video il numero di volte che la pagina è stata caricata
            Label1.Text = string.Format("Numero di volte che è stata caricata la pagina: {0}", Session["PageLoadCount"]);
            //cancello la listBox dei nomi
            this.ListBox1.Items.Clear();
            //scrivo tutti i nomi nel listbox
            this.ListBox1.Items.AddRange(list.Where(w => w.Contains(query.Text)).Select(s => new ListItem(s)).ToArray());
        }

        [System.Web.Services.WebMethod]
        public static string[] GetNames(string query)
        {            
            return list.Where(w=>w.Contains(query)).ToArray();
        }
    }
}

In questa prova di concetto, ogni volta che viene caricata la pagina viene caricato il valore filtrato del contenuto della lista dei nomi nella listbox. Se il valore di "query" (un campo input per scrivere il contenuto da trovare per restituire il nome, ad esempio "ino" restituisce Gino, Pino,Lino ecc.) non è valorizzato viene restituito tutto. Inoltre viene incrementato il numero di volte che hai caricato tutta la pagina
Poi abbiamo il webmethod, che sostanzialmente fa la stessa cosa: restituisce i nomi filtrati, ma il parametro lo passo come post tramite ajax.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
    <form id="form1" runat="server">
    <div>  
        <%-- Label contenente il numero di volte che viene caricata la pagina --%>  
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />
        <%-- textbox filtro per scrivere il contenuto che i nomi devono contenere per essere restituiti --%>
    <asp:TextBox ID="query" runat="server"></asp:TextBox>    
        <%-- bottone per la chiamata ajax --%>
    <button onclick="javascript:GetNames();return false;">Usa Ajax</button>
        <%-- bottone che usa il postback --%>
    <asp:Button ID="Button1" runat="server" Text="Usa postback" /><br />
        <%-- ListBox contenente i risultati --%>
    <asp:ListBox ID="ListBox1" runat="server"></asp:ListBox>
    </div>
     <script type="text/javascript">
         //funzione che chiama il webMethod
        function GetNames() {
            $.ajax({
                //chiamata di tipo POST
                type: "POST",
                //indirizzo composto dal nome della pagina piu il nome del metodo
                url: "webform1.aspx/GetNames",
                //tipo dati json
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                //passo i parametri post recuperati dal input id=query
                data: "{'query':'" + document.getElementById('<%=query.ClientID%>').value + "'}",
                cache: false,
                success: OnSuccess,
                failure: function (response) {
                    alert(response.d);
                }
            });
        }
         function OnSuccess(response) {
             //cancello le vecchie option
             $('#<%=ListBox1.ClientID%>').empty();
             //itero gli elementi restituiti
             $.each(response.d, function (index, item) {
                 //aggiungo option con il valore dell'elemento
                $('#<%=ListBox1.ClientID%>').append('<option value="1">' + item + '</option>');
            });
        }
    </script>
    </form>    
</body>
</html>


Una volta che scrivi un filtro (es:"ino"), se usi postback la pagina verrà ricaricata, quindi entrerà nel Page_Load, ed essendo valorizzato query ("ino") il sistema filtra i nomi e li aggiunge al listbox. Ovviamente incrementa anche il numero di volte che la pagina è stata caricata.
Se clicchi su usa ajax verrà invece chiamato il webmethod tramite ajax, quindi la pagina non verrà ricaricata, dunque non si entra nel page_load e non si incrementa il numero di volte che la pagina è stata chiamata. Una volta restituito il resultato in background uso JQuery per riscrivere i risultati nel listbox lato client.
944 messaggi dal 11 febbraio 2013
... ho visto l'esempio e addirittura l'ho capito :)

E' un capolavoro !

grazie mille mi sarà utilissimo in molte situazioni.
59 messaggi dal 17 maggio 2010
beh... magari proprio un capolavoro no, anche se ti ringrazio tanto del complimento, ma mi fa molto piacere che l'abbia capito.

Buon lavoro!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.