2012-08-14 2 views
16

Voglio solo chiedere, c'è un modo per impostare dinamicamente il valore del viewbag utilizzando jquery? provo questo codice nel mio script,Impostazione del valore in ViewBag utilizzando Jquery

$(".btn").on("click",function(){ 
@ViewBag.Id = $(this).attr("id") 
}); 

non so se il suo corretto, ma quando provo a eseguire il mio MVC 3 del progetto, questo errore appaio nel mio Firebug

Syntax Error 
    = $(this).attr("id") 

prega di aiuto. Grazie

+0

Mi dispiace, noto che ho dimenticato di digitare il mio errore –

+0

Presumibilmente '@ ViewBag.Id' non è definito da qualche parte, quindi non viene prodotto nulla (invece di un errore), quindi il lato sinistro dell'assegnazione è nulla . Controlla il tuo codice per vedere dove viene dichiarato '@ ViewBag.Id'. – Bojangles

risposta

36

Stai fraintendendo il funzionamento del ViewBag.

Quando si lavora in MVC, e si apre una pagina web, questo è ciò che (più o meno) accade:

  1. Il Metodo 'indice' di FooController è gestito. Alla fine, viene restituita una vista.
  2. L'applicazione MVC troverà quindi la vista e inizierà a eseguirne il rendering in base al codice HTML trovato nel file .aspx correlato. Se il programma incontra elementi come "@ ViewBag.Id", eseguirà fondamentalmente una sostituzione di stringa con qualunque sia il valore ".Id". (È un po 'più complicato di così, ma per ragioni di discussione, fondamentalmente si sostituisce una stringa).
  3. Dopo il rendering, il documento HTML viene inviato al browser, che viene quindi visualizzato.

Nel momento in cui il browser riceve la pagina, ViewBag è praticamente diventato "fuori campo". Ciò è dovuto al fatto che l'applicazione ASP (MVC) utilizza il ViewBag, ma JavaScript ha un ambito nel documento del browser Web (questo è il codice HTML restituito al browser entro il dell'applicazione, dopo ViewBag è andato JavaScript non fa parte dell'applicazione MVC, solo la pagina Web risultante

Quindi la risposta breve è, no non è possibile farlo in quel modo. Prova a pensare a come fare una stringa inline sostituire È possibile solo inserire il valore ViewBag nella pagina HTML, non viceversa

Supponiamo che l'ID sia 5, il seguente codice nel file aspx:

$(".btn").on("click",function(){ 
    @ViewBag.Id = $(this).attr("id") 
}); 

sarà inviata al browser come

$(".btn").on("click",function(){ 
    5 = $(this).attr("id") 
}); 

Dal momento che il browser vede solo questa ultima parte, semplicemente non ha senso in Javascript. Nel tuo caso, con l'errore di sintassi, significa semplicemente che la variabile non è stata inizializzata e stai tentando di accedere a null.

+0

Grazie Flater. ora capisco davvero il tuo punto. Posso solo visualizzare il valore di viewbag ma inserire un valore su jquery non è possibile. Molte grazie. –

+0

Esiste un'alternativa per questo tipo di soluzioni. – ashveli

+0

@ anvesh.veerelli: se si desidera che il server sia a conoscenza di una modifica apportata alla pagina Web; la tua pagina web deve connettersi al server. Questo può essere fatto in molti, molti modi diversi, dai post form, alle chiamate ajax, a soluzioni più complesse come SignalR. La tua domanda è molto ampia così com'è. – Flater