ASP.NET MVC: ottenere l'input dell'utente nel controller?

1

Volevo avere la tua opinione sulle migliori pratiche per ottenere input da parte dell'utente mentre fai qualcosa in un controller. Sono all'interno di un metodo di azione nel mio controller e sto elaborando alcuni dati. I dati potrebbero costringermi a chiedere all'utente ulteriori input, in base a tale input, quindi farò qualcosa con quei dati.

Qual è la migliore pratica per fare questo?

1) Come si invia un avviso o una casella di conferma per ottenere l'input dell'utente dal Controller? Questa azione viene avviata da un pulsante di aggiornamento su una griglia di Telerik MVC.

2) Come faccio a conservare i miei dati dall'elaborazione iniziale, a chiedere all'utente l'input e quindi continuare a elaborare i dati? È una buona quantità di dati.

Se la richiesta iniziale è stata avviata da una chiamata ajax in una funzione javascript, penso che avrei saputo come farlo. Probabilmente avrei il metodo Action restituire un oggetto JSON al metodo javascript che a sua volta chiederebbe all'utente e poi decidere quale azione del controller chiamare e quindi passare questo oggetto json ad esso.

Sono sulla strada giusta qui? Se è così, il mio problema sarebbe con la griglia di MVC Telerik. Avrei bisogno dell'evento di aggiornamento della mia griglia per essere associato al lato client.

Qualsiasi aiuto o pensiero su questo è apprezzato.

Steve

    
posta SteveB 20.09.2011 - 02:57
fonte

2 risposte

1

Perché non intercettare il OnSave evento sulla griglia, lato client, e fai la tua interazione lì prima di consentire alla transazione client / server di andare avanti? Non ho molta familiarità con le cose di Telerik, ma sembra che sia possibile espandere il modello di dati per comprendere qualsiasi informazione aggiuntiva che potrebbe essere necessario inviare al back-end (oltre a ciò che viene visualizzato nella griglia), e puoi modificare questo informazioni nel gestore di eventi.

    
risposta data 20.09.2011 - 03:07
fonte
1

Non puoi. HTTP è senza stato; una volta inviata una richiesta dal browser client al server, non c'è "hey non mi hai dato abbastanza informazioni! ALERTBOX!". Ogni interazione tra il controller e il client viene eseguita tramite richiesta / risposta.

In altre parole, quello che stai dicendo nella seconda metà del tuo post è corretto. Dovrai progettare un protocollo server / client che puoi interfacciare con Javascript. Forse restituirai solo un codice di errore, con un messaggio che il tuo javascript può visualizzare in una scatola.

Se stai provando a modellare un processo a più fasi, probabilmente avrai bisogno di più azioni nel tuo controller.

Ad esempio, puoi modellare il tuo processo come Controller.

public class CreateNewAccountProcessController:Controller{
   public JsonResult Step1(Step1Data data){
      // Persist Data Here (perhaps in session, or in data store)
   }
   public JsonResult Step2(Step2Data data){
      // Persist Data Here
   }
   public JsonResult Step3(Step3Data data){
      // Persist Data Here
   }
   public JsonResult Complete(CompleteData data){
   }
   public JsonResult Cancel(CancelData data){
      // Destroy/Nullify persisted data
   }
}

Quindi nel tuo JS potresti chiamare

ajax('/createNewAccount/step1',formData);
ajax('/createNewAccount/step2',formData);
ajax('/createNewAccount/step3',formData);
ajax('/createNewAccount/complete',id);

Ciò che potresti fare è tenere traccia di un processo con un identificatore univoco in modo da poter tracciare un processo.

    
risposta data 20.09.2011 - 03:19
fonte

Leggi altre domande sui tag