为什么我的图片/脚本不会出现在asp.net mvc部署的网站上?

时间:2009-03-06 21:59:13

标签: asp.net-mvc deployment iis-6

我已将应用程序部署到IIS6服务器。现在,我正在使用通配符映射。我的应用程序在我的开发机器上工作得非常好,但是当我尝试在服务器上访问它时,有些页面有效,有些页面没有。

这是脚本&给我带来最大问题的图像。

我有一个网址http://localhost/sdev/home/index,页面显示正常,但图片和脚本无法加载。当我查看源代码并查看我看到的URL时:

../../Content/Images/logo.png

如果我尝试导航到该网址,则会尝试转到

http://localhost/content/images/logo.png

而不是

http://localhost/sdev/content/images/logo.png

奇怪的是,有些页面工作正常,例如:

http://localhost/sdev/ServiceCall/DivisionStep/ALB?type=fsr

关于我可以采取哪些措施来解决这个问题?是的,我已经阅读了菲尔的指示,并认为我正确地遵循了它们,但也许我错过了一些东西。

3 个答案:

答案 0 :(得分:1)

使用

<%= Url.Content("~/Content/Images/logo.png") %>

生成网址,你应该没问题。

答案 1 :(得分:1)

我刚为你可以使用的图像写了一些助手。

(1)只需创建一个名为AppHelper的公共静态类using System.Web.Mvc;,并将其添加到MVC项目中名为“Helpers”的文件夹中。

(2)用这些方法复制:

    public static string Image(this HtmlHelper helper,
        string classText, string sourcePath, string altText, string width, string height)
    {
        return Image(helper, classText, sourcePath, altText, width, height, null);
    }
    public static string Image(this HtmlHelper helper,
        string classText, string sourcePath, string altText, string width, string height, object htmlAttributes)
    {
        StringBuilder sb = new StringBuilder();
        if (htmlAttributes != null)
            foreach (PropertyInfo p in htmlAttributes.GetType().GetProperties())
                sb.AppendFormat(@" {0}=""{1}""", p.Name, p.GetValue(htmlAttributes, null).ToString());

        if (htmlAttributes == null)
            return String.Format(@"<img{0} src=""{1}"" alt=""{2}"" width=""{3}"" height=""{4}"" />",
                String.IsNullOrEmpty(classText) ? String.Empty : String.Format(@" class=""{0}""", classText),
                (new UrlHelper(helper.ViewContext.RequestContext)).Content(sourcePath),
                altText, width, height);
        else
            return String.Format(@"<img{0} src=""{1}"" alt=""{2}"" width=""{3}"" height=""{4}""{5} />",
                String.IsNullOrEmpty(classText) ? String.Empty : String.Format(@" class=""{0}""", classText),
                (new UrlHelper(helper.ViewContext.RequestContext)).Content(sourcePath),
                altText, width, height, sb.ToString());
    }

(3)..并使用如下: <% =Html.Image("small_pic_border","~/Content/Images/Home/office2_137x139.jpg","principal headshot","137","139") %>

此方法使用liammclennan提到的Url.Content方法。它还应该强迫你进入一些好的习惯:比如使用替代文本等。

对于脚本使用: <script type="text/javascript" src="<% =Url.Content("~/Scripts/mootools.js") %>"></script>

答案 2 :(得分:0)

而不是这样做:

../../Content/Images/logo.png

这样做:

/sdev/Content/Images/logo.png

更好的是,在你的代码后面生成该URL的第一部分(/ sdev),因为听起来这部分可能会改变(我猜这里“sdev”是网站的某种开发版本,并且对于生产,URL前面没有“sdev”?)

它在第一个示例中不起作用的原因是浏览器看到它就像在查看“sdev / home”目录中名为“index”的文件一样。因此,上升两个目录会将您带到根级别。

对于“/ sdev / ServiceCall / DivisionStep / ALB”它工作正常因为你现在在“/ sdev / ServiceCall / DivisionStep”目录中查看“ALB”,并且上升两个级别会带你到“/ SDEV“