我需要获取在母版页上执行的脚本的名称以更新上次写入时间。
我正在使用它:
System.IO.File.GetLastWriteTime(Server.MapPath(Request.FilePath))
适用于default.aspx,但如果它在一个视图中我无法训练该文件的物理路径是什么来获取LastWriteTime。
有解决方案吗?当然,我在这里错过了一些非常简单的东西。
谢谢!
答案 0 :(得分:1)
根据我对System.Web.Routing的了解,路由发生在IIS中,因此无法获得View的真实物理路径。 您可以随时尝试使用
this.Request.PhysicalPath
获取物理路径,但它会返回如下内容:
C:\Projects\MySolution\MyProject\ViewFolder\ViewAction
答案 1 :(得分:1)
基于this answer和this one too,我写了一个像这样的html帮助器:
public static string ScriptBlock(this HtmlHelper html, string path)
{
return string.Format("<script src=\"{0}{1}\" type=\"text/javascript\"></script>\r\n", VirtualPathUtility.ToAbsolute(path), DateLastWriteFile(html.ViewContext.HttpContext.Server.MapPath(path)));
}
public static string CSSBlock(this HtmlHelper html, string path)
{
return string.Format("<link href=\"{0}{1}\" type=\"text/css\" rel=\"Stylesheet\" ></link>\r\n", VirtualPathUtility.ToAbsolute(path), DateLastWriteFile(html.ViewContext.HttpContext.Server.MapPath(path)));
}
public static string DateLastWriteFile(string path)
{
return "?Date=" + File.GetLastWriteTime(path).ToString("yyyyMMddhhmmss");
}
然后,我只是在view / master页面顶部包含正确的命名空间后,在我的主页面或视图页面中调用该方法:
<%= Html.CSSBlock("~/Content/Site.css") %>