ASP.Net MVC 视图(*.aspx)可以在多个 ASP.net MVC 项目中重用吗?

9
我想在多个ASP.Net MVC项目中重复使用*.aspx文件。这可能吗?
编辑:安东尼的建议是使用版本控制系统在多个项目之间共享公共文件,以实现我的问题的解决。幸运的是,由于我正在使用Subversion,所以这个解决方案适合我。但是,如果我没有使用一个版本控制系统,这个问题仍然可以解决吗?
可以做到这样吗?
1. 使用VS的网站预编译功能构建可重新分发的用户控件(如此处所述)。 2. 在所需的项目中引用输出程序集。 3. 创建一个修改后的视图引擎,通过泛型类型参数实例化用户控件。
然后,我们可以像这样构建控制器操作:
public ActionResult Shared()
{
    return View<SharedPageOrUserControl>();
}

那看起来可能吗?

2个回答

9
您可以尝试的一个想法是:
  1. 创建一个项目(类库)用于共享视图
  2. 在属性窗格中添加和设置任何 *.aspx 标记页到 嵌入资源
  3. 添加一个类“EmbeddedViewResult”,它继承自 ActionResult - 这将包含逻辑以确保在控制器操作结束时调用时提取并可用于磁盘的嵌入式 .aspx 文件。

因此,在您想要使用共享视图的项目中,控制器操作可以返回类似以下内容:

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

我之前在WebForms页面上做过类似的事情,所以这应该是可行的。


1
感谢您的建议。我尝试使用这个解决方案并遇到了两个问题:1)类库项目似乎不喜欢*.aspx文件(在“添加新项”对话框中缺失),2)嵌入式*.aspx文件似乎不容易进行编辑。 - David H
1
“添加新项”对话框是上下文敏感的;它不建议在类库项目中包含.aspx文件,因为这些文件在类库项目中通常没有相关性。但这并不意味着类库项目不能包含它们。 - bzlm
1
正确,模板丢失了;您需要添加一个文本文件并将其重命名。在这种情况下处理嵌入式资源非常麻烦(每次都要重新构建)!我曾经使用过这种技术来打包共享的管理页面,虽然不太有趣,但在许多应用程序中使用时会得到回报。 - Jarrod Dixon

2

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


1
是的,我也会这样做 - 但星期六晚上是建筑师宇航员出去玩的时间!+1 - Jarrod Dixon
由于我正在使用Subversion,我想我可以将*.aspx从一个公共存储库路径检出到需要它们的每个项目中。这是一个不错的解决方案。我想我应该为我的图形、CSS和JS文件也这样做。谢谢! - David H
2
-1;在软件配置管理中,共享是一种反模式(anti-pattern)。对其中一个副本进行检入会导致文件处于不一致状态,直到你记得执行获取操作以更新副本。 - Richard
@Richard:我不明白你的推理,任何文件被签入时都会出现相同的情况。这种方法对于这种情况来说是简单而有效的。 - AnthonyWJones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接