Question

L'appel Html.RenderPartial("~/Views/Payments/MyControl.ascx"); d'une vue fonctionne si MyControl.ascx est un contrôle qui hérite directement System.Web.Mvc.ViewUserControl.

Cependant, si les inherits de contrôle une nouvelle classe qui dérive de System.Web.Mvc.ViewUserControl , l'appel à Html.RenderPartial("~/Views/Payments/MyDerivedControl.ascx"); échoue, les rapports qu'une telle vue existe.

Exemple dérivé System.Web.Mvc.ViewUserControl:

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

Y at-il une solution de contournement, ou est-il une autre façon que je devrais faire cela? Peut-être un assistant HTML?

Était-ce utile?

La solution

Du point de vue MVC est pas une bonne conception d'avoir votre point de vue de fournir des données. Habituellement, cela est de la responsabilité du contrôleur. En fonction du contexte et de ce que représente ces données, vous pouvez utiliser un assistant HTML ou écrire un filtre d'action. Voici un exemple avec un filtre d'action personnalisé:

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

Et puis décorer votre action avec ce filtre:

[SomeDataActionFilter]
public ActionResult Index()
{
    return View();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top