在虚拟目录中运行时的MVC主页面设计时间支持

时间:2009-04-07 06:40:40

标签: asp.net-mvc

从虚拟目录运行MVC应用程序时,为Master Pages获取正确的设计时支持的首选方法是什么?

例如,在母版页中给出以下图像标记:

<img src="../../Content/Images/myimage.jpg" alt="image" />

这将在母版页和使用母版页的所有视图中提供完整的设计时支持,但是当从http://localhost/MyApp/运行应用程序时,图像当然无法找到(浏览器正在查找{{ 3}})。

将图像更改为:

<img src="<%=Url.Content("~/Content/Images/myimage.jpg")%>" alt="image" />

将修复运行时显示,但会破坏母版页和视图中的设计时支持。

第三个选项是将image标记更改为runat = server,如下所示:

<img runat="server" src="../../Content/Images/myimage.jpg" alt="image" />

这适用于运行时和设计时,但必须指定runat =“server”看起来有点像黑客。

有没有更好的方法来解决这个问题?

编辑:选项cagdas提议将在设计时工作,但不在运行时:

<img src="/Content/Images/myimage.jpg" alt="image" />

3 个答案:

答案 0 :(得分:1)

如果您需要设计时支持if if false hack,您可以将这两种方式结合起来。这种方法比runat =“server”方法更具攻击性,但在少数情况下它很有用。我将此方法用于css类intellisense和jQuery vsdoc文件。

<% // design-time use only %>
<% if (false) { %>
<img src="../../Content/Images/myimage.jpg" alt="image" />
<% } %>
<% // run-time %>
<img src="<%=Url.Content("~/Content/Images/myimage.jpg")%>" alt="image" />

答案 1 :(得分:0)

如果Content文件夹位于应用程序的根目录(我认为是,因为这是默认设置)。你可以这样做:

<img src="/Content/Images/myimage.jpg" alt="image" />

将在应用程序的根目录中查找内容文件夹。

答案 2 :(得分:0)

我更喜欢使用你的第二个例子:

<img src="<%=Url.Content("~/Content/Images/myimage.jpg")%>" alt="image" />

..但是就像你说的那样,它不会给你设计支持。我认为在MVC环境中你应该使用VS设计器。我只是让一个dev服务器从VS运行,并在VS旁边的我的收藏浏览器中打开我的页面 - 这比设计视图更好 - 它是一个真正的浏览器。

除此之外,您不想牺牲使用Url.Content方法的好设计理念,只是为了让一些图像出现在设计师中。从长远来看,在任何地方使用Url.Content来维持一致的方法会让你受益更多。