Tornando uma visão parcial derivada com html.renderPartial
-
20-09-2019 - |
Pergunta
Chamando Html.RenderPartial("~/Views/Payments/MyControl.ascx");
De uma visão, funciona se mycontrol.ascx é um controle que herda diretamente System.Web.Mvc.ViewUserControl
.
No entanto, se o controle herdar uma nova classe que deriva de System.Web.Mvc.ViewUserControl
, a chamada para Html.RenderPartial("~/Views/Payments/MyDerivedControl.ascx");
Falha, relatando que essa visão não existe.
Exemplo derivado System.Web.Mvc.ViewUserControl
:
class MyDerivedControl : System.Web.Mvc.ViewUserControl
{
public Method()
{
ViewData["SomeData"] = "test";
}
}
Existe uma solução alternativa, ou há outra maneira de fazer isso? Talvez um ajudante HTML?
Solução
Do ponto de vista do MVC, não é um bom design ter sua exibição, forneça dados. Geralmente, essa é de responsabilidade do controlador. Dependendo do contexto e do que esses dados representam, você pode usar um auxiliar HTML ou gravar um filtro de ação. Aqui está um exemplo com um filtro de ação personalizado:
public class SomeDataActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
filterContext.Controller.ViewData["SomeData"] = "test";
}
}
E depois decore sua ação com este filtro:
[SomeDataActionFilter]
public ActionResult Index()
{
return View();
}