【问题标题】:Rendering a derived partial view with Html.RenderPartial使用 Html.RenderPartial 渲染派生的局部视图
【发布时间】:2010-03-18 18:41:40
【问题描述】:

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

但是,如果控件继承派生自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 助手?

【问题讨论】:

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


    【解决方案1】:

    从 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();
    }
    

    【讨论】:

    • 视图没有提供数据;我的问题是关于将提供的数据传递给 派生 部分视图的视图以及在解释后尝试显示它时产生的错误(通过派生的 ViewUserControl 类)。数据来自哪里并不重要。
    • @FreshCode,我不知道为什么会发生这种特殊异常。我只能告诉你,视图不应该像你在 MVC 应用程序中那样被继承。视图仅用于显示来自控制器的数据。母版页、部分视图、HTML 助手等技术允许您在视图中编写和重用功能。在 VS 生成的默认 ASP.NET MVC 项目模板中,甚至没有与 ascx 控件关联的 .cs 文件。
    猜你喜欢
    • 2015-12-31
    • 2011-11-17
    • 2023-03-30
    • 2013-01-13
    • 1970-01-01
    • 2010-10-19
    • 2016-01-03
    • 1970-01-01
    相关资源
    最近更新 更多