Ripopolamento del modulo Web dopo l'invio non valido

1

In generale, quale dovrebbe essere il modo migliore per ripopolare un modulo quando l'invio non riesce a causa di input non validi.

Qui, invalido significherebbe che qualcosa non ha superato il controllo o alcuni metodi di validazione lato server. Quindi, in caso di errore, il modulo viene ricaricato e l'utente vorrebbe vedere ripopolare i suoi dati.

Come lo facciamo in generale, qual è il modo più efficace (in termini di risorse, la sessione non dovrebbe essere una modalità IMO efficiente per le risorse)?

    
posta edam 25.10.2016 - 11:13
fonte

3 risposte

1

Stai cercando Associazione dati (Wikipedia):

Data binding is a general technique that binds data sources from the provider and consumer together and synchronizes them...

In a data binding process, each data change is reflected automatically by the elements that are bound to the data. The term data binding is also used in cases where an outer representation of data in an element changes, and the underlying data is automatically updated to reflect this change. As an example, a change in a TextBox element could modify the underlying data value.

Molti framework web in più lingue offrono una sorta di associazione di dati. È un po 'diverso per le applicazioni Web di quanto lo sia per le applicazioni installate a causa della natura asincrona e stateless delle connessioni HTTP.

Un rapido esempio di utilizzo di ASP.NET MVC Framework:

public class BlogPostsController : Controller
{
    // [1]
    public ActionResult Create()
    {
        BlogPostModel model = new BlogPostModel();

        return View(model);
    }

    // [2]
    [HttpPost]
    public ActionResult Create(BlogPostForm model)
    {
        if (ModelState.IsValid)
        {
            BlogPost post = blogPostService.CreateNewPost(model);

            return RedirectToAction("Details", new { id = post.Id });
        }

        return View(model);
    }
}
  1. Qui sopra c'è il Controller che gestisce l'interazione dell'utente. Il metodo Create() viene eseguito quando una richiesta GET viene inviata all'URL /BlogPosts/Create .

  2. Il metodo Create(BlogPostForm) viene eseguito quando viene inviato <form> . Qui controlliamo if (ModelState.IsValid) che esegue le convalide sui campi del modulo. Se restituisce false, allora abbiamo errori di validazione. La riga return View(model) esegue nuovamente il rendering del modulo "Crea post del blog" in modo che possa visualizzare i messaggi di errore all'utente. Se lo stato del modello è valido, salviamo nel database ed emettiamo una risposta di reindirizzamento HTTP al browser.

Ora, la parte di associazione dati entra in gioco nel modello utilizzato per creare l'HTML della pagina Web (nel file Views/BlogPosts/Create.cshtml ):

@model BlogPostForm

@using (Html.BeginForm())
{
    <p>
        <label>
            Title:
            <!-- "Binds" the Title property to the text box -->
            @Html.EditorFor(model => model.Title)
        </label>

        <!-- Shows validation messages for the Title property -->
        @Html.ValidationMessageFor(model => model.Title)
    </p>

    <p>
        <button type="submit">Save</button>
    </p>
}

Due chiamate al metodo rappresentano l'effettivo processo di "associazione dati":

@Html.EditorFor(model => model.Title)

Questo crea un tag HTML <input type="text" value="..."> , in cui la proprietà value viene riempita con il valore corrente della proprietà Title nel modello. Il framework fa questo per il programmatore.

Ora, i messaggi di convalida:

@Html.ValidationMessageFor(model => model.Title)

Visualizza tutti i messaggi di convalida per la proprietà Title . Ancora una volta, il programmatore non deve fare molto. Il framework fa la maggior parte del lavoro per te.

Uso di AJAX e / o JavaScript per le convalide dei moduli

JavaScript può essere disabilitato. Un utente malintenzionato può sempre aggirare le convalide JavaScript, anche le convalide AJAX. Sempre. Sempre, sempre, sempre, sempre, sempre, sempre, eseguire sempre tutte le convalide sul server durante l'elaborazione del modulo di invio. Gli utenti malintenzionati non possono ignorare il server per inserire i dati nel database (i difetti di SQL injection non sono resistenti).

Le convalide del lato client sono solo una comodità e nient'altro.

    
risposta data 26.10.2016 - 15:33
fonte
0

Non c'è nulla di sbagliato con la memorizzazione dei valori inviati nella sessione e il loro utilizzo per ripopolare il modulo.

Tuttavia, potresti utilizzare Javascript per inviare i dati e notificare eventuali errori di convalida senza effettivamente uscire dal modulo.

    
risposta data 25.10.2016 - 11:21
fonte
0

Potresti implementarlo utilizzando una soluzione AJAX. Passa il modulo tramite AJAX a uno script PHP che convalida i tuoi input e li memorizza (se passano), quindi restituisce un valore true o false.
Se il tuo script restituisce false, puoi semplicemente impedire alla pagina di fare qualsiasi cosa lasciando intatti tutti gli input, l'utente non vedrebbe alcuna modifica alla pagina e potrebbe quindi essere visualizzato un messaggio elegante (usando qualcosa come avvisi dolci), o anche meglio l'elemento offendente contrassegnato per l'utente, in modo che possano correggere il problema.

    
risposta data 25.10.2016 - 11:27
fonte

Leggi altre domande sui tag