2009-12-15 5 views
0

Mon action crée un viewdata fortement typé, qui est transmis à ma vue.Essayer de faire passer Model à partiel, comment je fais ça?

Dans la vue, je passe le modèle à la méthode partielle de rendu.

public ActionResult Index() 
{ 
      ViewDataForIndex vd = new ViewDataForIndex(); 

      vd.Users = Users.GetAll(); 

      return View(vd); 
} 


public class ViewDataForIndex: ViewData 
    { 
      public IList<User> Users {get;set;} 

    } 

maintenant dans la vue:

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

<% Html.RenderPartial("~/controls/blah.ascx", ViewData.Model); %> 

et blah.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
  1. comment puis-je accéder maintenant mon modèle?
  2. Si je voulais créer une classe fortement typée pour mon ViewUserControl, comment ferais-je cela? hériter de?

Répondre

0

One: A l'intérieur du ascx:

<%= Model.YourProperty %> 

Deux: Fournir un type Argument à ViewUserControl:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<String>" %> 
0

J'aime @ deuxième approche de jfar mieux, car il permet de modifier plus facilement si vous jamais décider de passer un modèle plus complexe à la vue.

Ainsi, vous pouvez transmettre une classe qui a plusieurs propriétés et/ou plusieurs objets enfants.

Si vous héritez de l'objet maintenant, alors tout ce que vous devez faire est d'hériter de votre objet complexe et de modifier un morceau de code, ainsi que d'ajouter les nouvelles propriétés, et votre fait.

0

Plus précisément à la réponse de jfar:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ViewDataForIndex>" %> 

Si votre page parent a un modèle de type ViewDataForIndex, appelant l'enfant avec le même ViewData.Model passera également un objet de type ViewDataForIndex.

+0

Hé, j'ai dû avoir une réponse en cache quand vous avez édité le mien. – jfar