Есть ли способ получить ссылку для ViewPage, которая содержит вид в параграфе с частичного просмотра?ViewUserControl, содержащий ViewPage
ответ
Абсолютный ответ: НЕТ
Вы должны использовать ViewData или модели, чтобы поделиться ,
Не 100%, но я не думаю, что это возможно. Что конкретно вы хотите использовать в ViewPage из Partial? Не могли бы вы просто поделиться моделью между ViewPage и ViewUserControl?
Кажется, нет никакого стандартного свойства для этого, так что вы должны передать объект ViewPage на частичный вид на себе:
<% Html.RenderPartial("partial_view_name", this); %>
Мое решение было базовым классом для любых моделей, используемых частичным контролем. Это полезно в тех случаях, когда вам нужно указать модель, но хотите, чтобы частичный вид имел доступ к определенным вещам из содержащейся модели 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;
}
}
}
}