2013-06-21 17 views
7

Ho visto numerose fonti che affermano che è scorretto mettere in pratica gli script nelle viste parziali, ma questo solleva un'enorme domanda ...Rendering di script da utilizzare in Vista parziale?

Come si suppone che si debbano eseguire script che interagiscono con le viste parziali? Ho provato a utilizzare @section scripts { } o qualcosa del genere, ma non funziona. Affatto. La sezione contiene gli script bene, ma non vengono visualizzati quando il partial viene caricato nella vista completa.

Inoltre, non riesco a visualizzare gli script della mia vista parziale sulla mia vista completa perché gli script richiamano i valori dallo Model, che viene visualizzato solo nella vista parziale, poiché è il pezzo del puzzle che funziona davvero con dati.

Spero che non suona troppo complicato ... Come posso efficace, efficiente e correttamente il rendering di script da utilizzare con gli elementi mia parziale di Vista eModel?

+0

Se si sa che una vista utilizzerà una vista parziale, è sufficiente creare un file .js per quella vista parziale e importarlo nella vista. – Rob

risposta

4

@keyCrumbs Non ti darò una risposta diretta, ma qualcosa da analizzare.
Uno dei problemi più grandi in cui si chiamano gli script per la visualizzazione parziale è la replica del codice.

Pensa che userai ajax per ottenere la vista parziale e continuerai a farlo per un po '. In ogni chiamata scaricherai il codice dello script e lo inserirai in html. Ogni volta che resetti il ​​blocco di script in html, le funzioni vengono ripristinate, le variabili vengono ripristinate. Può essere un grosso problema a seconda del codice js.

Altro punto è la dimensione della risposta, si può dire, ma js ha una dimensione piccola, e dirò moltiplicare questa dimensione per ogni chiamata di un utente e successivamente moltiplicare per sempre utente connesso.

Così alla fine, una soluzione per voi, in questo caso è: creare la funzione nella pagina e chiamare la funzione nella vista parziale in questo modo:

tua pagina: Page.cshtml

<script type="text/javascript"> 
    function myPartialView_Load() { 
     $("birth").datepicker(); 
     $("phone").mask("000-0000"); 
    } 
</script> 

<!-- Some other code here --> 

<div> 
    <!-- Or you can call from a ajax or other way... --> 
    @Html.Action("MyActionPartialView") 
</div> 

vostra visione parziale: MyPartialView.cshtml

<script type="text/javascript"> 
    $(function() { myPartialView_Load(); }); 
</script> 

<form> 
    <input type="text" name="birth" id="birth" /> 
    <input type="text" name="phone" id="phone" /> 
</form> 

Quindi, come si vede ° Il problema non sta nel mettere in visione parziale, ma nel modo in cui lo fai tu. Tutte le regole di buona pratica hanno un "perché" dietro, se capisci il "perché" puoi determinare fino a che punto la regola è un aiuto e non un peso. E decidi di romperlo o no.

Come un detto, non ti ho dato una risposta definitiva ma qualcosa su cui ti interessa. È possibile utilizzare altri modi per delineare il problema.

+0

Mi ci è voluto un po 'per tornare a questo, ma grazie per la spiegazione! – Kehlan

+0

Stai ancora utilizzando js nella vista parziale che viene sottoposta a rendering prima che jquery venga richiamato nel layout. –

+0

@jonny È uguale al mio [** caso **] (http://stackoverflow.com/questions/38734014/mvc-how-test-scripts-for-layout-view-partial-view)? Problemi con l'impostazione delle librerie di script da utilizzare in visualizzazione e vista parziale. Qualunque documentazione o campione dovrei leggere? –

Problemi correlati