我已将应用程序部署到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
关于我可以采取哪些措施来解决这个问题?是的,我已经阅读了菲尔的指示,并认为我正确地遵循了它们,但也许我错过了一些东西。
答案 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“