2009-10-05 9 views

Répondre

0

La réponse absolue: NON

Vous devez utiliser ViewData ou un modèle pour partager .

0

Pas 100% mais je ne pense pas que ce soit possible. Qu'est-ce que vous voulez spécifiquement référencer dans le ViewPage du Partiel? Ne pourriez-vous pas simplement partager un modèle entre ViewPage et ViewUserControl?

0

Il semble qu'il n'y a pas de propriété standard pour ce que vous devez passer l'objet ViewPage à vue partielle vous:

<% Html.RenderPartial("partial_view_name", this); %> 
0

Ma solution était un baseclass pour tous les modèles utilisés par les contrôles partiels. Il est utile pour les moments où vous devez spécifier un modèle, mais souhaitez que l'affichage partiel ait accès à certaines choses à partir du modèle de vue contenant.

Remarque: cette solution prend automatiquement en charge une hiérarchie de vues partielles.

Utilisation:

Lorsque vous appelez RenderPartial fournissent le modèle (pour la vue). Personnellement, je préfère ce modèle, qui est de créer une vue en place sur la page consistant en ce que la vue patiente pourrait avoir besoin du modèle parent.

Je crée un ProductListModel à partir du modèle actuel, ce qui rend le modèle parent disponible facilement pour la vue partielle.

<% Html.RenderPartial("ProductList", new ProductListModel(Model) 
         { Products = Model.FilterProducts(category) }); %> 

Dans le contrôle partiel lui-même vous spécifiez le ProductListModel en vue fortement typé.

<%@ Control Language="C#" CodeBehind="ProductList.ascx.cs" 
    Inherits="System.Web.Mvc.ViewUserControl<ProductListModel>" %> 

classe modèle pour la vue partielle

Note: J'utilise IShoppingCartModel pour spécifier le modèle pour éviter un couplage à l'arrière partielle à la vue contenant.

public class ProductListModel : ShoppingCartUserControlModel 
    { 
     public ProductListModel(IShoppingCartModel parentModel) 
      : base(parentModel) 
     { 

     } 

     // model data 
     public IEnumerable<Product> Products { get; set; } 

    } 

Baseclasses:

namespace RR_MVC.Models 
{ 
    /// <summary> 
    /// Generic model for user controls that exposes 'ParentModel' to the model of the ViewUserControl 
    /// </summary> 
    /// <typeparam name="T"></typeparam> 
    public class ViewUserControlModel<T> 
    { 
     public ViewUserControlModel(T parentModel) 
      : base() 
     { 
      ParentModel = parentModel; 
     } 

     /// <summary> 
     /// Reference to parent model 
     /// </summary> 
     public T ParentModel { get; private set; } 
    } 

    /// <summary> 
    /// Specific model for a ViewUserControl used in the 'store' area of the MVC project 
    /// Exposes a 'ShoppingCart' property to the user control that is controlled by the 
    /// parent view's model 
    /// </summary> 
    public class ShoppingCartUserControlModel : ViewUserControlModel<IShoppingCartModel> 
    { 
     public ShoppingCartUserControlModel(IShoppingCartModel parentModel) : base(parentModel) 
     { 

     } 

     /// <shes reummary> 
     /// Get shopping cart from parent page model. 
     /// This is a convenience helper property which justifies the creation of this class! 
     /// </summary> 
     public ShoppingCart ShoppingCart 
     { 
      get 
      { 
       return ParentModel.ShoppingCart; 
      } 
     } 
    } 
}