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

发布于 2024-07-16 14:28:06 字数 272 浏览 4 评论 0原文

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

我正在使用这个:

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

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

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

谢谢!

I need to get the name of the script being executed on the master page to update the Last Write time.

I'm using this:

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

which works for the default.aspx, but if its within a View I am unable to workout what the physical path to the file is to get the LastWriteTime.

Is there a solution to this? Surely I'm missing something incredibly easy here.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

记忆で 2024-07-23 14:28:06

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

this.Request.PhysicalPath

来获取物理路径,但它会返回类似以下内容的内容:

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

From what I know about System.Web.Routing, the routing happens in IIS, making it impossible to get the true physical path of your View.
You can always try to use

this.Request.PhysicalPath

to get the physical path but it will return something like :

C:\Projects\MySolution\MyProject\ViewFolder\ViewAction
2024-07-23 14:28:06

基于这个答案和< a href="https://stackoverflow.com/questions/351937/in-asp-net-mvc-how-can-use-i-url-content-from-code">这个也是,我像这样编写了一个 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") %>

Based on this answer and this one too, I wrote a html helper like so:

    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");
    }

Then, I simply call the method in my master or view pages, after including the proper namespace at the top of the view/master page obviously:

   <%= Html.CSSBlock("~/Content/Site.css") %>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文