35 messaggi dal 31 marzo 2010
Ciao tutti, nella mia applicazione mvc3, do in pasto ad una certa view una mia viewmodel e ne mostro le proprietà ciclandovi sopra (@foreach ec..)
Il mio problema è che nel metodo del controller che si occupa di estrarre i dati con cui popolare la viewmodel, può succedere che la viewmodel sia null.
Ritornandola alla viee e ciclando su di essa ovviamente si verifica un errore.
Io vorrei mostrare un messaggio di errore nella view quando il model è null.
L'unico modo per farlo è inserire uno switch all'interno del markup?

@if (model == null)
{
<p>MEssaggio di errore</p>
}
else
{
ciclo foreach
}

Oppure esiste un modo più elegante da inserire nel metodo del controller?

Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

sonnicolo ha scritto:

L'unico modo per farlo è inserire uno switch all'interno del markup?
No, potresti anche creare un'altra View che abbia l'unico scopo di visualizzare un messaggio all'utente.

if (viewModel == nul)
   return View("NessunDato");

return View(viewModel);

In linea generale, una View dovrebbe essere il più semplice possibile e limitarsi a presentare i dati che le vengono passati dal controller.
Il verificare che il Model non sia null, secondo me, è già al di fuori della sua competenza.

Se ti rendi conto di aver questa necessità in più punti dell'applicazione, potresti inserire la view nella cartella Shared, e passarle il messaggio stringa da visualizzare.

ciao
Modificato da BrightSoul il 30 giugno 2013 18.56 -

Enjoy learning and just keep making
35 messaggi dal 31 marzo 2010
Ok, grazie mille, effettivamente non ci avevo pensato di fare una nuova view... a questo punto preferisco farne una nella cartella Shared ed utilizzarla ogni qualvolta ne ho bisogno...
11.886 messaggi dal 09 febbraio 2002
Contributi
certo, va bene.
Dato che il controllo Model != null non viene cablato nella View, ti si aprono anche altre opportunità. Immagina che un domani la tua applicazione maturi il requisito che, quando un model vale null, debba non soltanto mostrare un messaggio ma restituire anche un errore HTTP ed aggiungere una riga di log. A quel punto potresti spostare la logica che ora hai nei controller e centralizzarla in un ActionFilter. Qui ne vedi un esempio, sarebbe una soluzione più elegante che ti risparmierebbe ripetizioni di codice.
http://devlicio.us/blogs/hadi_hariri/archive/2010/04/30/checking-for-a-null-model-in-asp-net-mvc.aspx

ciao!

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.