1

有没有办法从部分视图中获取包含部分视图的 ViewPage 的引用?

4

4 回答 4

0

我的解决方案是部分控件使用的任何模型的基类。当您需要指定模型但希望局部视图能够访问包含视图的模型中的某些内容时,它很有用。

注意:此解决方案将自动支持部分视图的层次结构。

用法:

当您调用 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; }

    }

基类:

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;
            }
        }
    }
}
于 2009-10-13T00:12:07.303 回答
0

似乎对此没有标准属性,因此您应该自己将 ViewPage 对象传递给部分视图:

<% Html.RenderPartial("partial_view_name", this); %>
于 2009-10-07T05:18:20.123 回答
0

绝对答案:NO

您需要使用 ViewData 或 Model 来共享它。

于 2009-10-07T16:44:18.990 回答
0

不是100%,但我认为这是不可能的。您想从 Partial 的 ViewPage 中具体引用什么?难道你不能在 ViewPage 和 ViewUserControl 之间共享一个模型吗?

于 2009-10-06T17:52:34.067 回答