1

我有一个 ASP.NET MVC Web 应用程序,它需要使用 include 指令包含其他几个 html 文件,如下所示:

<!--#include virtual=/include/bottom.shtml -->

我的问题是我需要将此应用程序部署在应用程序路径不同的服务器上。例如,在一个地方我可能将应用程序映射到,比如说,localhost/myapp/在另一个地方我可能只有localhost/.

在这个localhost/场景中,我上面给出的代码示例工作得很好。但是当我的应用程序打开时localhost/myapp,我收到一条解析器错误消息,让我知道它找不到文件。

如何自定义指令以考虑应用程序的相对路径(最好不要每次都使用查找和替换)?

谢谢!

4

2 回答 2

3

杀死前导斜杠 - 这是强制路径从根计算,而不是你的页面。

但就像@mare 所说,没有理由在 2011 年使用 #include。您可能想要做的是使用 Razor 将其渲染为部分@Html.Partial()


鉴于更新的约束,在 MVC 中处理此问题的方法仍然比使用旧的#include 更简洁。您要做的是设置控制器操作以从磁盘读取文件并吐回内容。然后像普通的 MVC 操作一样渲染该操作。

于 2011-07-05T12:10:12.607 回答
1

首先,我不知道您为什么要在 ASP.NET MVC 中使用此类指令,因为还有其他更好的选项,例如 Partials、Sections 等。

但是,如果你真的想使用这些指令,你可以使用

Url

帮手。

更新

您可以使用UrlUrl.Content()、Url.Action()、Url.ActionLink() 等辅助方法在 ASP.NET MVC 中构造链接。

例如,这将在典型的 ASP.NET MVC Razor 视图中呈现到 bottom.shtml 文件的相对路径:

#include virtual=@Url.Content("~/include/bottom.shtml")

现在您的问题源于使用include显然在 HTML 注释中的一个。我只能解释我的观察。如果我在我的视图中这样做

<!-- @Url.Content("~/public/images/foobar.png") -->

这适用于 ASP.NET MVC WebForms 视图引擎

<!-- <%=Url.Content("~/public/images/foobar.png")%> -->

我通过前两句话在网页源中得到了浏览器呈现的内容:

<!-- /public/images/foobar.png -->

因此,我相信它是有效的,但我也认为您可能需要更多的 ASP.NET MVC 学习。

于 2011-07-05T11:58:46.233 回答