【问题标题】:Can ASP.Net MVC Views (*.aspx) be reused in multiple ASP.net MVC projects?ASP.Net MVC 视图 (*.aspx) 可以在多个 ASP.net MVC 项目中重用吗?
【发布时间】:2009-03-22 08:09:10
【问题描述】:

我想在多个 ASP.Net MVC 项目中重用 *.aspx 文件。这可能吗?

编辑:Anthony 关于使用版本控制系统在多个项目之间共享通用文件的建议以实用的方式解决了我的问题。幸运的是,由于我使用的是 Subversion,所以该解决方案适合我。但是,如果我不使用的话,这个问题还怎么解决呢?

有可能做这样的事情吗?

  1. 使用 VS 的网站预编译功能构建可再分发的用户控件。 (如here 所述。)
  2. 在所需项目中引用输出程序集。
  3. 创建一个修改后的视图引擎,通过泛型类型参数实例化用户控件。

然后我们像这样构造控制器动作:

public ActionResult Shared()
{
    return View<SharedPageOrUserControl>();
}

这看起来可能吗?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    您可以尝试的一个想法是:

    1. 为您的共享视图创建一个项目(类库)
    2. 在“属性”窗格中添加任何 *.aspx 标记页面并将其设置为 Embedded Resources
    3. 添加一个继承自 ActionResult 的类“EmbeddedViewResult” - 这将包含确保在控制器操作结束时调用嵌入式 .aspx 文件并在磁盘上可用的逻辑。

    所以在您想使用共享视图的项目中,控制器操作可能会返回类似

    public ActionResult Shared()
    {
        return new EmbeddedViewResult("SharedLib.SharedPage");
    }
    

    我已经对 WebForms 页面做了类似的事情,所以应该可以。

    【讨论】:

    • 感谢您的建议。我尝试使用此解决方案并遇到两个问题:1.) 类库项目似乎不喜欢 *.aspx 文件(“添加新项目”对话框中缺少)和 2.) 嵌入的 *.aspx 文件似乎不易于编辑。
    • “添加新项目”对话框是上下文相关的;它不建议使用 .aspx 文件,因为这些文件在类库项目中没有通常的相关性。但这并不意味着类库项目不能包含它们。
    • 正确,模板丢失;您必须添加一个文本文件并重命名它。在这种情况下处理嵌入式资源是一个巨大的痛苦(到处重建)!我曾使用这种技术来打包共享管理页面,它并不好玩,但在许多应用程序中使用时它得到了回报。
    【解决方案2】:

    我通常通过源代码控制来解决这类问题。大多数系统(甚至是 VSS)都允许您在多个项目之间共享一个文件。

    【讨论】:

    • 是的,我可能也会这样做——但是周六晚上是建筑师宇航员出去玩的时候了! +1
    • 由于我使用的是 Subversion,我想我可以将 *.aspx 从公共存储库路径检出到需要它们的每个项目中。这是一个巧妙的解决方案。我想我应该为我的图形、css 和 js 文件这样做。谢谢!
    • -1;共享对于 SCM 来说是一种反模式。 (签入其中一个副本会使您的文件处于不一致的状态,直到您记得执行 get 来更新副本)。
    • @Richard:我不遵循您的推理,签入任何文件时都会出现同样的情况。这种方法对于这种情况来说既简单又有效。
    猜你喜欢
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多