Pregunta

Llamando Html.RenderPartial("~/Views/Payments/MyControl.ascx"); desde un punto de vista funciona si MyControl.ascx es un control que hereda directamente System.Web.Mvc.ViewUserControl.

Sin embargo, si los hereda de control una nueva clase que deriva de System.Web.Mvc.ViewUserControl , la llamada a Html.RenderPartial("~/Views/Payments/MyDerivedControl.ascx"); falla, informando de que hay tal punto de vista existe.

Ejemplo System.Web.Mvc.ViewUserControl derivado:

class MyDerivedControl : System.Web.Mvc.ViewUserControl
{
    public Method()
    {
        ViewData["SomeData"] = "test";
    }
}

¿Hay una solución, o hay otra forma en que debería estar haciendo esto? Tal vez un asistente de HTML?

¿Fue útil?

Solución

Desde el punto de vista MVC no es un buen diseño para tener su punto de vista proporcionar datos. Por lo general, esto es responsabilidad del controlador. Dependiendo del contexto y lo que esto representa los datos que usted podría utilizar un ayudante HTML o un escribir un filtro de acción. He aquí un ejemplo con un filtro de acción personalizada:

public class SomeDataActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);
        filterContext.Controller.ViewData["SomeData"] = "test";
    }
}

Y luego decorar su acción con este filtro:

[SomeDataActionFilter]
public ActionResult Index()
{
    return View();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top