Frage

Beim Html.RenderPartial("~/Views/Payments/MyControl.ascx"); aus einer Sicht funktioniert, wenn MyControl.ascx ist eine Kontrolle, die direkt inherits System.Web.Mvc.ViewUserControl.

Wenn jedoch die Kontrolle inherits eine neue Klasse, die ergibt sich aus System.Web.Mvc.ViewUserControl , der Aufruf an Html.RenderPartial("~/Views/Payments/MyDerivedControl.ascx"); ausfällt, meldet, dass keine solche Ansicht vorhanden ist.

Beispiel abgeleitet System.Web.Mvc.ViewUserControl:

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

Gibt es eine Abhilfe, oder gibt es eine andere Art, wie ich dies tun sollte? Vielleicht ein HTML-Helfer?

War es hilfreich?

Lösung

Von MVC Sicht ist es nicht ein gutes Design Ihrer Sicht liefert Daten zu haben. Normalerweise ist dies in der Verantwortung des Controllers. Je nach Kontext und was diese Daten darstellen, könnten Sie einen HTML-Helfer oder eine Schreib eines Action-Filter verwenden. Hier ist ein Beispiel mit einem benutzerdefinierten Aktion Filter:

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

Und dann schmücken Sie Ihre Aktion mit diesem Filter:

[SomeDataActionFilter]
public ActionResult Index()
{
    return View();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top