Рендеринг производного частичного представления с помощью Html.RenderPartial

StackOverflow https://stackoverflow.com/questions/2472460

Вопрос

Вызов 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();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top