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

Призвание 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?

1 ответ

Решение

С точки зрения 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();
}
Другие вопросы по тегам