27 messaggi dal 17 maggio 2011
Ciao,

sto sviluppando un applicazione in Asp.NET MVC 5 (C#), ma qualche problema a ricaricare i dati di una tabella.
In pratica una volta aperta la pagina viene chiamato il metodo Index() che carica tutti i dati dei clienti e li visualizza in una tabella.
Una volta caricata la pagina è possibile filtrare questi risultati per vari campi e tramite un pulsante di submit inviare la richiesta al server.
Ho quindi creato un altro metodo Index in Post con i valori da utilizzare come filtro.
La query che viene eseguita seleziona correttamente i dati filtrati però una volta che viene eseguita l'istruzione

return View(customers.ToPagedList(pageNumber, pageSize));


la pagina non viene ricaricata con i nuovi valori.

Qualcuno riesce ad aiutarmi a risolvere?
Grazie
Ciao
Enrico
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Enrico,


return View(customers.ToPagedList(pageNumber, pageSize));

Hai provato a mettere un breakpoint su questa istruzione per verificare che effettivamente l'esecuzione passi di lì?

Non è che per caso hai dimenticato di impostare il method POST sul form, e quindi la richiesta parte come GET?

La view non ha alcuna memoria di cosa aveva visualizzato in precedenza. Tutto ciò che viene mostrato lì dentro le viene passato dall'action del controller. Quindi il problema va appunto ricercato nell'action.
  • Non viene invocata l'action che ti aspetti;
  • customers.ToPagedList non restituisce i risultati che ti aspetti;
  • L'action non ha correttamente ricevuto i criteri di filtro, e perciò non sta filtrando.


Tutti questi problemi li puoi verificare usando il debugger di Visual Studio.

ciao,
Moreno
Modificato da BrightSoul il 15 ottobre 2016 12.29 -

Enjoy learning and just keep making
27 messaggi dal 17 maggio 2011
Si, sono sicuro che l'esecuzione passi per l'istruzione di return e che i dati estratti dal database sono filtrati.

Il fatto è che non vedo proprio la pagina aggiornarsi.

Di seguito riporto il codice

View Index.cshtml
 @using (Html.BeginForm(FormMethod.Post))
                    {
                    <tr role="row" class="filter">
                        <td></td>
                        <td>
                            /** Campi per i filtri **/
                        </td>
                        <td>
                            <button type="submit">Ricerca</button>
                            <button>Reset</button>
                        </td>
                    </tr>
                    }


Controller

public ViewResult Index()
        {
            var customers = db.Customers.Include(c => c.Company).Include(c => c.SubStatus).Include(c => c.SubAgent).OrderByDescending(s => s.InsertDate);
            return View(customers.ToPagedList(1, 10));
        }

[HttpPost]
        public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page, string searchStringFullName, string searchStringCompany, string Agency, string SubAgent, string Status)
        {

  /** Selezione dei dati**/

return View(customers.ToPagedList(pageNumber, pageSize));
}


Al caricamento della pagina viene richiamato il metodo Index(), mentre quando si preme il pulsante Ricerca entra nel metodo Index(string,string,string,int,string,string,string,string,string) in Post
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Si, sono sicuro che l'esecuzione passi per l'istruzione di return
...
Il fatto è che non vedo proprio la pagina aggiornarsi.

Mmmh ok, quindi dev'esserci una specie di Triangolo delle Bermude in cui la risposta del server viene risucchiata.
Se è tutto come mi hai riferito, penso che nella tua pagina ci sia un javascript che intereccetta il submit del form ed invece invia i dati con una richiesta POST con Ajax. Quando la risposta arriva dal server, non la usi in nessun modo e quindi la pagina non si aggiorna con i nuovi risultati. Il mancato aggiornamento potrebbe anche dipendere da un errore javascript durante l'elaborazione dei risultati.

Non mi vengono in mente altre ipotesi. Comunque si fa subito a verificare: apri gli strumenti di sviluppo del browser (tasto F12). Se vai nella scheda "Rete" o "Network", vedrai passare tutte le richieste tra client e server e potrai sapere se una richiesta è "normale" (cioè se ha causato l'aggiornamento di pagina) o se è una richiesta Ajax/XHR (e qual è la sua risposta). Se usi Chrome, metti la spunta su "Preserve log", in modo che il log delle richieste non venga svuotato ogni volta che aggiorni la pagina.
Se non riesci a dedurre la soluzione, posta uno screenshot delle richieste che si vedono lì.

Posta anche gli eventuali errori che vedi apparire nella scheda Console.

ciao,
Moreno
Modificato da BrightSoul il 15 ottobre 2016 22.34 -

Enjoy learning and just keep making
27 messaggi dal 17 maggio 2011
Dopo diversi cicli di debug con gli strumenti di sviluppatore del browser, ho scoperto che nella pagina veniva importato un file javascript che aveva qualche problema e non faceva andare a buon fine la risposta proveniente dal server.
Commentata la riga incriminata la pagina è stata aggiornata correttamente.
Verificherò qual'è il problema nel file JS, però almeno ora la pagina viene ricaricata con i dati aggiornati.

Grazie mille BrightSoul
Ciao
27 messaggi dal 17 maggio 2011
Il file incriminato è jquery.min.js.
Se non importo il file la pagina viene ricaricata correttamente.
Però il file mi servirebbe per gestire alcune transazioni presenti all'interno della pagina.
Sapete come posso importare il file e far comunque ricaricare la pagina?
Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,


Il file incriminato è jquery.min.js.

Questo è il file minificato della libreria jQuery. Il semplice fatto di aggiungerlo alla pagina non causerà problemi.

Però nella tua pagina potrebbe esserci qualche codice javascript che si avvale di jQuery per compiere determinate operazioni. Se c'è un errore in quel codice, ecco che la tua pagina potrebbe comportarsi in maniera inaspettata.
Bisogna debuggare il javascript della tua pagina e la prima cosa da fare in questi casi è aprire la console dagli Strumenti di sviluppo del browser e vedere se ci sono errori lì. Comparirà anche l'esatto numero di linea che sta causando il problema.
Se non riesci a venirne a capo, chiedi ad un collega esperto di javascript di aiutarti a portare alla luce il problema. Si tratterà quasi sicuramente di un errore di sintassi o di un carattere fuori posto.

Io da qui non ti posso aiutare a meno che non mi mandi un link alla pagina da cui posso vederla in funzione.

ciao,
Moreno

Enjoy learning and just keep making

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.