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

Вызов 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 Ответ

0 голосов
/ 19 марта 2010

С точки зрения 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();
}
...