27 messaggi dal 18 aprile 2018
Buonasera a tutti,
sto cercando di aprire un modal di botstrap dopo il submit del form, ho provato diversi metodi anche utilizzando ajax, ma con ajax il problema che riscontro è il seguente:
scrivo nel DB mi si apre il modal ma poi nel messaggio che dovrebbe apparire nel modal non viene scritto niente(lo mando con un viewbag) giustamente la pagina non viene "ricaricata" e quindi non vi sono scritte, le viewbag che ho messo chiaramente vanno a step se superano un passaggio restitusicono un messaggio altrimenti un altro messaggio ecc.. non riesco a gestire questi messaggi da ajax. c'è un altro modo per aprire il modal dal mia azione?
lo script ajax che utilizzo è questo:

<script>
    $(function () {
      $('#partecipa').click(function (e) { 
        var cod = $('#cod').val(); 
        $.ajax({ 
          url: '/Test/index', 
          data: { 'cod': cod }, 
          type: "post",//get o post
          dataType: 'Json', //formato dati
          cache: false,// 
          success: function (dat) { 
            $('#btn').click(); //apro il modal
          },
          error: function (xhr, ajaxOptions, thrownError) {

            //errore
              
            
          }
        });
      });
    });
  </script>


nel controller:


[HttpPost]
    public JsonResult Index(String cod)
    {
if (controlloGiocata.Any())
        {
        
          UpAna.Premio = "Partecipa";
          
          int result = 0;
          try { result = DB.SaveChanges(); Json.Data = UpAna; } catch (Exception e) {  }
          
          if (result != 0)
          {
            ViewBag.esito = "Grazie per aver giocato";
// se questa condizione è vera allora deve aprirsi il modal

          }
          }
        else
        {
          ViewBag.errore = "Primo errore";
//in questo caso no
        }

Json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
      return Json;

Grazie mille
Modificato da Mirko2018 il 25 luglio 2018 17.49 -
Modificato da Mirko2018 il 25 luglio 2018 17.50 -
10.806 messaggi dal 09 febbraio 2002
Contributi
Ciao,
il ViewBag serve a passare dei dati accessori dal controller alla view. In questo caso, l'action Index del tuo controller sta restituendo un JsonResult e non un ViewResult, e quindi non c'è alcuna view che potrà raccogliere i valori che hai impostato sul ViewBag.

La soluzione consiste nell'impostare il messaggio e l'errore sull'oggetto Json, in modo che poi venga recapitato al client insieme agli altri dati che già gli stai passando.
Nell'action metti:
if (result != 0)
{
  Json.Messaggio = "Grazie per aver giocato";
} else {
  Json.Errore = "Primo errore";
}


Messaggio e Errore sono due proprietà che dovrai creare all'interno dell'oggetto Json, che già avevi usato qui:
 try { result = DB.SaveChanges(); Json.Data = UpAna; } catch (Exception e) {  }


Ora, nel tuo esempio di codice non vedo dove sono state dichiarate le variabili UpAna e Json quindi non posso essere più preciso. Spero che non siano proprietà statiche e che sappia tu come agire.

Infine, lato client, usa i valori che ti arrivano come risposta dalla richiesta ajax per riempire gli elementi HTML adibiti alla visualizzazione del messaggio e dell'errore.

success: function (dat) { 
  //Copio il messaggio e l'errore nei rispettivi elementi HTML adibiti alla loro visualizzazione
  $('#idDellElementoPerIlMessaggio').text(dat.Messaggio);
  $('#idDellElementoPerLErrore').text(dat.Errore);
  $('#btn').click(); //apro il modal
},


ciao,
Moreno
Modificato da BrightSoul il 25 luglio 2018 20.25 -

Enjoy learning and just keep making
27 messaggi dal 18 aprile 2018
Buongiorno Moreno,
come sempre grazie del tuo supporto,
purtroppo


Json.Messaggio = "Grazie per aver giocato";


mi segnala errore su "messaggio" in quanto non esiste.. ho provato con f12 ma non posso modificare le proprietà della classe aggiungendo i parametri messaggio ed errore.

per quanto riguarda le due proprietà le i db chiaramente sono in protected e UpAna la creo cosi:


arcAnagrafica UpAna= ...


mentre il json semplicemente cosi

JsonResult Json = new JsonResult();
27 messaggi dal 18 aprile 2018
Ho risolto così:
notato che in json.Data posso metterci quello che voglio ho inserito un dizionario in questo modo

Json.Data = new { Success="True" , Message = "Grazie per aver giocato.", JsonRequestBehavior.AllowGet };


e messa la condizione nella view cosi:

success: function (dat) {
            if (dat.Success=="True") {
              
              $('#btn').click();//apro il modal
              $('#idvincita').text(dat.Message);
            } else {
              $('#iderrore').text(dat.Message);
            }
              
            
          },
          error: function (dat) {
            
            
          }



Grazie :)
10.806 messaggi dal 09 febbraio 2002
Contributi
Esatto, così funziona. Puoi anche crearti una tua classe apposita se lo reputi opportuno.

Json.Data = new OggettoRisposta { Success="True" , Message = "Grazie per aver giocato."};


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.