2012-02-15 17 views
7

Supponiamo di avere una vista parziale denominata UserDetails la cui clausola @model è impostata su una classe del modello denominata User.Come faccio a richiamare una vista parziale con "null" per il suo modello?

Ora supponiamo di avere un'altra classe modello che sembra qualcosa di simile:

public sealed class SpecialModel 
{ 
    public User SpecialUser; 
    public ... // other stuff 
} 

All'interno una vista per la SpecialModel, voglio richiamare la mia visione parziale di cui sopra:

@model MyProject.Models.SpecialModel 
@{ ViewBag.Title = "..."; } 
<div class='user'>@Html.Partial("UserDetails", Model.SpecialUser)</div> 

questo funziona bene se l'utente non è null. Tuttavia, se l'utente è null, ottengo questa eccezione:

System.InvalidOperationException: La voce del modello passato nel dizionario è di tipo 'MyProject.Models.SpecialModel', ma questo dizionario richiede un elemento del modello di tipo 'MyProject .Models.User'.

Chiaramente, il messaggio di eccezione sta mentendo. Come faccio a correggerlo correttamente in modo che possa passare normalmente null?

risposta

18

Invece di

@Html.Partial("UserDetails", Model.SpecialUser) 

scrivere il più prolisso

@Html.Partial("UserDetails", new ViewDataDictionary(Model.SpecialUser)) 

che rende questo lavoro specifico scenario.

Tuttavia, ha uno svantaggio: cancella tutte le informazioni trasmesse dal controller. In particolare, cancella tutte le informazioni di convalida; se stai postando alcuni dati e vuoi visualizzare un messaggio di errore di validazione all'interno di quella vista parziale, non puoi usare questa tecnica.

+0

La seguente soluzione [qui] (http://stackoverflow.com/a/12037580/649497) supera il lato negativo! – Mojtaba

Problemi correlati