2011-10-29 4 views
23

Esiste un modo per creare e utilizzare proprietà dinamiche per ViewBag basate su stringhe?Crea proprietà ViewBag basate su stringhe

Qualcosa di simile

ViewBag.CreateProperty("MyProperty"); 
ViewBag.Property("MyProperty") = "Myvalue"; 

Grazie

risposta

45

ho appena scoperto che Viewdata può essere utilizzato per creare tali proprietà per ViewBag

Quindi per creare CityErrorMessage proprietà devo usare

ViewData.Add("CityErrorMessage", MyErrorMessage) 

e quindi nella vista posso usare

@ViewBag.CityErrorMessage 

EDIT:

ho creato le proprietà del ViewBag in modo dinamico, perché ho ricevuto il nome di campo con errore di validazione in una lista

modo che il codice è in realtà

foreach (ValidationError err in ValidationErrors) 
{ 
    ViewData.Add(
     string.format("{0}ErrorMsg", err.PropertyName), 
     err.ValidationErrorMessage); 
} 
+0

Grazie! Questo ha richiesto molto tempo per trovare. –

+0

grazie per aver spiegato la relazione tra ViewBag e ViewData – anIBMer

+2

Si deve notare che è possibile utilizzare 'ViewData [" NameHere "]' per ottenere in modo dinamico il valore degli elementi memorizzati. – Matty

-3
Aggiornamento

: mi sono tardato a capire che questo codice proviene da un progetto di Nancy e Nancy implementa il proprio ViewBag, quindi questo codice non funziona con .Net M VC3 e non risponde alla domanda. Tuttavia, si potrebbe sostenere che la domanda potrebbe essere risolta passando a Nancy.

ho trovato ViewBag ha un metodo Add in modo da poter fare questo:

foreach(var row in model) 
      { 
       ViewBag.Add(row.resourceName, row.content); 
      } 
+0

Eccezione generata: "Microsoft.CSharp.RuntimeBinder.RuntimeBinderException" in Microsoft.CSharp.dll Informazioni aggiuntive: "System.Dynamic.DynamicObject" non contiene una definizione per "Aggiungi" – JEuvin

+0

Verificherò il progetto che ho con questo codice funzionante. Sembra che gli altri non siano in grado di replicarlo. –