2011-07-05 39 views
1

我有需要使用include指令来包含其他几个HTML文件,像这样一个ASP.NET MVC Web应用程序:相对于服务器端包含和ASP.NET MVC

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

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

localhost/的情况下,我上面给出的代码示例工作得很好。但是当我的应用程序在localhost/myapp上时,我收到解析器错误消息,它让我知道它找不到该文件。

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

谢谢!

回答

3

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

但是就像@mare说的那样,在2011年没有理由使用#include。你可能想要做的就是将它作为局部使用Razor的@Html.Partial()


鉴于更新后的约束条件,在MVC中处理这个问题的方法比使用旧的#include还要简单得多。你想要做的是设置一个控制器动作从磁盘读取文件并吐出内容。然后像普通的MVC动作那样渲染那个动作。

+0

我不能使用Razor视图引擎,我需要坚持ASP引擎。我还需要包含那些确切的HTML文件,不能更改格式。据我所知,Html.Partial()需要一个视图名称,它不会接受.shtml(也不是HTML)文件。另外,杀死前导斜杠将使它在我的Views/Shared文件夹中搜索。 –

+0

更新了答案以反映新的约束。 –

+0

好主意!谢谢 ! –

1

首先,我不知道你为什么会在ASP.NET MVC使用这样的指令,因为有像局部模板其他更好的选择,部分等

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

Url 

帮助程序。

UPDATE

您使用Url助手方法,如Url.Content(),Url.Action(),Url.ActionLink()来构建ASP.NET MVC的链接。

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

#include [email protected]("~/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学习。

+0

实际上,现在我想,我不知道这是否会被服务器解析,因为它在HTML注释中,您可能想试试 – mare

+0

您建议的结果是我的解析中的html注释页面看起来像这样:<! - #include virtual =/include/bottom.shtml - >。没有实际的包括发生。 –

+0

删除html评论然后... – mare