在ASP.NET MVC中,如何检索正在运行的脚本的文件名?

时间:2009-03-25 06:13:38

标签: c# asp.net-mvc request

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

我正在使用它:

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

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

有解决方案吗?当然,我在这里错过了一些非常简单的东西。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

this.Request.PhysicalPath

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

C:\Projects\MySolution\MyProject\ViewFolder\ViewAction

答案 1 :(得分:1)

基于this answerthis 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") %>