2009-10-05 3 views

ответ

0

Абсолютный ответ: НЕТ

Вы должны использовать ViewData или модели, чтобы поделиться ,

0

Не 100%, но я не думаю, что это возможно. Что конкретно вы хотите использовать в ViewPage из Partial? Не могли бы вы просто поделиться моделью между ViewPage и ViewUserControl?

0

Кажется, нет никакого стандартного свойства для этого, так что вы должны передать объект ViewPage на частичный вид на себе:

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

Мое решение было базовым классом для любых моделей, используемых частичным контролем. Это полезно в тех случаях, когда вам нужно указать модель, но хотите, чтобы частичный вид имел доступ к определенным вещам из содержащейся модели View.

Примечание: это решение автоматически поддержит иерархию частичных представлений.

Использование:

При вызове RenderPartial поставить модель (для зрения). Лично я предпочитаю этот шаблон, который должен создать представление на странице, состоящее из того, что может потребоваться для родительской модели.

Я создаю ProductListModel из текущей модели, что делает родительскую модель доступной для частичного просмотра.

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

В самом частичном контроле можно указать ProductListModel как сильно типизированной.

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

класс модели для частичного вида

Примечание: Я использую IShoppingCartModel указать модель, чтобы избежать связи с частичной обратно вмещающего зрения.

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; 
      } 
     } 
    } 
}