【问题标题】:Create controller base class (partial)创建控制器基类(部分)
【发布时间】:2009-11-02 17:43:09
【问题描述】:

由于我的 @html.render 操作使我的开发和生产服务器崩溃,我必须使用 partials(crap)

我尝试创建 public partial controller{} 类,这样我就可以为我的所有视图设置所需的数据,但我没有运气(一切都中断了)。

我来自 LAMP cakePHP 背景,非常需要简单。

我需要知道如何创建部分基本控制器(不会覆盖常规基本控制器)以及如何从类中访问多个模型。

谢谢!

【问题讨论】:

  • 为什么不能覆盖基本控制器?只需创建您自己的所有其他控制器都继承自的基本控制器。这是使用 ASP.NET MVC 的推荐方法。
  • 在我关于 ViewData 的回答中添加了评论(这个是为了让您获得通知)。尽管如此,我还是建议您找出 RenderAction 崩溃的原因(在 SO 上询问、发布异常跟踪等),因为它对于正交数据渲染非常有用。
  • 单个对象的 ViewData["x"] 不应引发错误。 RenderAction 不应该崩溃。您仍然没有显示您遇到的任何错误 - 也没有显示来自 RenderAction 而不是来自 ViewData [“x”]。没有这些信息,几乎不可能提供帮助。我同意继续尝试“艰难的方式”很有趣——也就是你自己——但是为什么要在这里问呢?

标签: c# asp.net-mvc model-view-controller renderaction


【解决方案1】:
public class BaseController: Controller
{
   public override OnActionExecuting(...) { ... }
   public override OnActionExecuted(... context) 
   {
       if (context.Result is ViewResult)
           ((ViewResult)context.Result).ViewData["mycommondata"] = data;
   }
   ...
}

public class MyController1: BaseController 
{
}

即只需从新的基本控制器类派生即可。

但是我建议你在这里问为什么你的 RenderPartial “崩溃” - 因为它对你来说可能是一个更好的方法,而且它显然不应该崩溃。

【讨论】:

  • renderpartial 工作 - 它的渲染操作(期货)崩溃了,我需要在我的视图中使用多个数据集 - 现在查看视图模型模式 - 但我真的很怀念 cakePHP(我现在本可以做到这一点)
  • 好的,RenderAction,但它为什么以及如何崩溃?为什么不解决问题,而是想要一些不太适合该问题的东西?另外,如果您需要多个数据,为什么不使用 ViewData["data1"] = data1; ViewData["data2"] = data2.而且,当然,您本可以这样做;如果我必须用 CakePHP 编写,我会说“我现在可以在 ASP.NET MVC 中做到这一点”;-)。
  • 我尝试设置 viewdata['x'] 和 viewdata['y'] viewdata['x'] 是单个对象 viewdata['y'] 是我可以传递的列表 viewdata['y '] 到部分视图,但单一 viewdata['x'] 抛出错误我仍在解决为什么渲染操作会导致一切崩溃 - 至少我还在继续 - 学习'艰难的方式'很有趣
  • (+1) 能否提供更高级的基类示例?
  • 高级在什么意义上,你需要什么功能?
【解决方案2】:

创建基本控制器的更好方法

    public class Controller : System.Web.Mvc.Controller
{
    public shipsEntities db = new shipsEntities();

    public Controller()
    {
        ViewData["ships"] = db.ships.ToList();
    }
}

这样其他控制器遵循常规约定

public class MyController : Controller

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 2014-09-13
    • 2013-03-21
    相关资源
    最近更新 更多