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?

Foi útil?

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();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top