有没有办法从局部视图中获取包含parital视图的ViewPage的引用?
答案 0 :(得分:0)
不是100%,但我不认为这是可能的。您希望在Partial的ViewPage中引用什么? 难道你不能只在ViewPage和ViewUserControl之间共享一个Model吗?
答案 1 :(得分:0)
似乎没有标准属性,所以你应该自己将ViewPage对象传递给局部视图:
<% Html.RenderPartial("partial_view_name", this); %>
答案 2 :(得分:0)
绝对答案:否
您需要使用ViewData或Model来共享它。
答案 3 :(得分: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; }
}
<强>基类:强>
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;
}
}
}
}