这是一个相对较小的问题。
在开发ASP.Net网站时,如果我指的是使用ResolveUrl()方法的资源,它可以在实时服务器或开发服务器上运行,但不能同时在两者上运行,具体取决于提供的URL。
例如,如果我的代码尝试选择具有以下代码的资源,则它可以在实时服务器上运行,但不能在开发服务器上运行,因为JScript.js不在http://localhost:xx/Assets
下,但在http://localhost:xx/ApplicationName/Assets
下。
<script src='<%# ResolveUrl("~/Assets/JScript.js")%>' type="text/javascript"></script>
为了使它在两台服务器上都能正常工作,我必须根据我正在处理的服务器不断更改URL。
我一直在遭受这个令人烦恼的问题,但一直忽视它。
有更好的方法吗?
谢谢!
答案 0 :(得分:1)
我知道这可能不是开箱即用的方式,但我使用这些来确保URLS在我的应用程序中是核心而没有问题。在我的Page / View的基类中提供这些......
public static string ApplicationRootUrl()
{
string port = String.Empty;
if (HttpContext.Current.Request.ServerVariables["SERVER_PORT"] != null && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "80" && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "443")
{
port = String.Concat(":", HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString());
}
string protocol = "http://";
if (HttpContext.Current.Request.ServerVariables["SERVER_PORT_SECURE"] != null && HttpContext.Current.Request.ServerVariables["SERVER_PORT_SECURE"] != "0")
{
protocol = "https://";
}
return String.Concat(protocol, String.Concat(HttpContext.Current.Request.Url.Host, port, HttpContext.Current.Request.ApplicationPath, '/').Replace(@"//", @"/").ToLower());
}
/// <summary>
/// Expands a virtual URL to an absolute URL using the current application root url
/// </summary>
/// <param name="url"></param>
public static string ExpandUrl(string url)
{
if (url.Trim().StartsWith("~"))
{
return String.Concat(ApplicationRootUrl(), url.Substring(1).Replace("//", "/"));
}
if (url.Trim().StartsWith("www", StringComparison.OrdinalIgnoreCase))
{
return String.Concat("http://", url);
}
return url;
}
答案 1 :(得分:1)
正如我在上面的评论中所述,您希望使用&lt;%=%&gt; 与&lt;%#%&gt; 来呈现内联表达式。您只能将哈希符号用于内联数据绑定。
答案 2 :(得分:0)
尝试在DEV计算机上创建http://localhost:xx/ApplicationName
虚拟应用程序。这样〜/ Assets将在PROD和DEV
基本上,“Assets”目录需要位于App的根目录中,因此您需要在Dev和PROD上将“Assets”的父目录设为App root。