2014-06-26 16 views
18

Sto cercando di ottenere una vista parziale per eseguire il rendering usando Razor in MVC5. Quando usoRendering di viste parziali con Razor in MVC5

@{ Html.RenderPartial("ViewName", model); } 

ottengo l'errore del parser:

Unexpected "{" after "@" character. Once inside the body of a code block (@if {}, @{}, etc.) you do not need to use "@{" to switch to code.

Quando rimuovo il {}, vale a dire:

@Html.RenderPartial("ViewName", model); 

ottengo l'errore di compilazione

Cannot implicitly convert type 'void' to 'object'.

Cosa sto facendo sbagliato?

risposta

27

Non hanno inviato contesto di tale codice, ma che l'errore accade veramente solo quando si utilizza @ direttamente all'interno di un blocco di codice senza involucri HTML. Per esempio:

@if (true) { 
    @{ Html.RenderPartial(...); } 
} 

darebbe l'errore, mentre:

@if (true) { 
    <div> 
     @{ Html.RenderPartial(...); } 
    </div> 
} 

andrebbe bene. Si potrebbe anche risolvere il programma semplicemente rimuovendo il blocco di codice per Html.RenderPartial tutto, compreso il @:

@if (true) { 
    Html.RenderPartial(...); 
} 
+1

Ben individuato, è stato inserito in un @foreach {}! – Mourndark

+0

bella risposta, il dettaglio è stato di gran lunga migliore del mio :) –

3

puoi mostrare il codice che circonda RenderPartial? Sto indovinando che sei in un ciclo, se il blocco, o qualche altro tipo di blocco di codice. Se è così, si sarebbe solo chiamare

Html.RenderPartial("ViewName", model); 
7

Questo è sbagliato:

@Html.RenderPartial("ViewName", model); 

Questo è corretto:

@{ Html.RenderPartial("ViewName", model); } 

L'errore di analisi potrebbe essere causato da contenuti della vista parziale. Ad esempio, se disponi di un indirizzo email, assicurati di utilizzare @@ per uscire correttamente dal simbolo @.

Unexpected "{" after "@" character. Once inside the body of a code block (@if {}, @{}, etc.) you do not need to use "@{" to switch to code.

+0

può essere anche perché il blocco di codice (patto con @ sing) è dopo e altro blocco di codice (foreach se ecc.) Se questo è il caso non si deve mettere un @ davanti al blocco di codice –

+0

@ Believe2014 nel mio caso, c'è la vista indice, ho creato il modulo di ricerca vista parziale che voglio includere nella vista indice da @ {Html.RenderPartial ("testone"); }, se eseguo TestOne da solo funziona, ma se eseguo index c'è un errore, l'elemento del modello passato nel dizionario è di tipo 'PagedList.PagedList' ..... – SAR

17

Si può anche utilizzare @Html.Partial("~/View/Home/myview.cshtml")

Restituisce stringa mentre Html.RenderPartial chiamate Scrivi internamente, e restituisce void.

+0

IMHO questa è la risposta corretta/migliore alla domanda. – Form

0

Si prega di rivedere il codice, si potrebbe essere trovato che errore perché si sta utilizzando questo codice: @{ Html.RenderPartial("ViewName", model); } all'interno di qualsiasi altra @{} clausola. Per favore, rileggi con attenzione il messaggio di errore che si ottiene nel browser, non è necessario utilizzare il @{} per passare al codice perché ci si trova già all'interno, quindi è sufficiente rimuovere @{ e } e si dovrebbe farlo funzionare correttamente.

Problemi correlati