2009-05-12 9 views

Répondre

2

Vous pouvez passer n'importe quel type d'objet à la vue en utilisant le dictionnaire ViewData.

Il suffit de mettre dans votre contrôleur:

ViewData["example"] = (YourObject)data; 

Et à votre avis:

<%= ((YourObject)ViewData["example"]).YourProperty %> 

Et si vous voulez passer votre objet comme modèle Voir alors:

return View("viewname", (YourObject)data); 

Et assurez-vous que votre vue ressemble à ceci:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<YourObject>" %> 
+0

Pourquoi utiliser ViewData lorsque YourObject existe déjà dans la vue en tant que modèle? –

+0

J'essayais de dire qu'il peut soit passer l'objet en utilisant les viewdata ou directement comme le modèle de vue. Ma réponse était très mauvaise, je l'admets. – Drevak

0

Utilisez un ViewModel pour votre page.

vous pouvez utiliser un modèle de vue contenant à la fois des objets simples et complexes, par exemple:

public class MyComplexViewModel 
{ 
    public Address UserAddress { get; set;} 
    public List<string> ValidZipCodes { get; set; } 
    public string Message { get; set; } 
} 

Si votre vue hérite du ViewPage générique avec quelque chose comme ça

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyComplexViewModel>" %> 

vous pourriez alors dans la voir utiliser le modèle de vue comme modèle .:

<%= Html.Encode(Model.UserAddress.SomeAddressProperty) %> 
<%= Html.Encode(Model.ValidZipCodes.Count) %> 
<%= Html.Encode(Model.Message) %> 
2

Vous pouvez créer un viewmodel tha t est ensuite utilisé dans la vue fortement typée. Vous pouvez vérifier ce blogpost by Stephen Walther qui l'explique. J'ai commencé à juste jeter des choses dans viewdata, mais cela devient assez confus assez rapidement;).

Questions connexes