Рендеринг производного частичного представления с помощью Html.RenderPartial
-
20-09-2019 - |
Вопрос
Вызов Html.RenderPartial("~/Views/Payments/MyControl.ascx");
из представления работает, если MyControl.ascx является элементом управления, который напрямую наследует System.Web.Mvc.ViewUserControl
.
Однако если элемент управления наследует новый класс, производный от System.Web.Mvc.ViewUserControl
, вызов Html.RenderPartial("~/Views/Payments/MyDerivedControl.ascx");
терпит неудачу, сообщая, что такого представления не существует.
Полученный пример System.Web.Mvc.ViewUserControl
:
class MyDerivedControl : System.Web.Mvc.ViewUserControl
{
public Method()
{
ViewData["SomeData"] = "test";
}
}
Есть ли обходной путь или есть другой способ сделать это?Возможно, HTML-помощник?
Решение
С точки зрения MVC, предоставление данных из вашего представления — не лучший вариант.Обычно это обязанность контролера.В зависимости от контекста и того, что представляют собой эти данные, вы можете использовать помощник HTML или написать фильтр действий.Вот пример с настраиваемым фильтром действий:
public class SomeDataActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
filterContext.Controller.ViewData["SomeData"] = "test";
}
}
А затем украсьте свое действие этим фильтром:
[SomeDataActionFilter]
public ActionResult Index()
{
return View();
}