相对服务器端包含和ASP.NET MVC

时间:2011-07-05 11:50:15

标签: asp.net-mvc server-side-includes

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

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

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

localhost/场景中,我上面给出的代码示例工作得很好。但是当我的应用程序在localhost/myapp上时,我收到一条解析器错误消息,告诉我它无法找到该文件。

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

谢谢!

2 个答案:

答案 0 :(得分:3)

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

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


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

答案 1 :(得分:1)

首先,我不知道为什么你会在ASP.NET MVC中使用这样的指令,因为还有其他更好的选项,如Partials,Sections等。

但是,如果您确实想要使用这些指令,则可以使用

获取相对路径
Url

帮手。

<强>更新

使用Url.Content(),Url.Action(),Url.ActionLink()等Url个助手方法构建ASP.NET MVC中的链接。

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

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

现在你的问题源于使用显然在HTML评论中的include。 我只能解释我的观察。如果我在我的视图中执行此操作

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

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

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

我通过以前的句子在网页的源代码中通过浏览器呈现这个:

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

因此,我相信它正在运行,但我也认为您可能需要更多的ASP.NET MVC学习。