0

我需要获取母版页上正在执行的脚本的名称以更新上次写入时间。

我正在使用这个:

System.IO.File.GetLastWriteTime(Server.MapPath(Request.FilePath))

它适用于 default.aspx,但如果它在视图中,我无法确定文件的物理路径是什么来获取 LastWriteTime。

有针对这个的解决方法吗?当然,我在这里错过了一些非常容易的事情。

谢谢!

4

2 回答 2

1

根据我对 System.Web.Routing 的了解,路由发生在 IIS 中,因此无法获得视图的真实物理路径。您可以随时尝试使用

this.Request.PhysicalPath

获取物理路径,但它会返回如下内容:

C:\Projects\MySolution\MyProject\ViewFolder\ViewAction
于 2009-03-29T13:56:26.150 回答
1

基于这个答案这个答案,我写了一个像这样的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");
    }

然后,我只是在我的母版或视图页面中调用该方法,显然在视图/母版页的顶部包含正确的命名空间之后:

   <%= Html.CSSBlock("~/Content/Site.css") %>
于 2011-09-29T20:20:17.087 回答