使用Html.RenderPartial渲染派生的局部视图

时间:2010-03-18 18:41:41

标签: asp.net-mvc partial-views renderpartial viewusercontrol

如果MyControl.ascx是直接继承Html.RenderPartial("~/Views/Payments/MyControl.ascx");的控件,则从视图中调用System.Web.Mvc.ViewUserControl

但是,如果控件继承派生自System.Web.Mvc.ViewUserControl 的新类,则对Html.RenderPartial("~/Views/Payments/MyDerivedControl.ascx");的调用将失败,并报告不存在此类视图。

示例派生System.Web.Mvc.ViewUserControl

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

是否有解决方法,或者我应该采取其他方式吗?也许是HTML助手?

1 个答案:

答案 0 :(得分:0)

从MVC的角度来看,让您的视图提供数据并不是一个好的设计。通常这是控制器的责任。根据上下文和此数据表示的内容,您可以使用HTML帮助程序或编写操作筛选器。以下是自定义操作过滤器的示例:

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

然后使用此过滤器装饰您的操作:

[SomeDataActionFilter]
public ActionResult Index()
{
    return View();
}