2009-03-25 9 views
0

Ich muss den Namen des Skripts abrufen, das auf der Masterseite ausgeführt wird, um die letzte Schreibzeit zu aktualisieren.Wie erhalten Sie in ASP.NET MVC den Dateinamen des ausgeführten Skripts?

Ich verwende diese:

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

, die für die default.aspx funktioniert, aber wenn sie in einer Ansicht I zum Training nicht in der Lage bin, was der physische Pfad die Datei die Lastwritetime zu erhalten ist, .

Gibt es dafür eine Lösung? Sicher vermisse ich hier etwas unglaublich Einfaches.

Danke!

Antwort

1

Von dem, was ich über System.Web.Routing weiß, geschieht das Routing in IIS, was es unmöglich macht, den wahren physischen Pfad Ihrer Ansicht zu erhalten. Sie können immer

this.Request.PhysicalPath 

zu verwenden versuchen, den physischen Pfad zu bekommen, aber es wird wie etwas zurückgeben:

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

Basierend auf this answer und this one too, schrieb ich ein HTML-Helfer wie 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"); 
    } 

Dann rufe ich einfach die Methode in meinem Master oder Ansicht Seiten auf, nachdem Sie den richtigen Namespace am oberen Rand der Ansicht/Masterseite offensichtlich:

<%= Html.CSSBlock("~/Content/Site.css") %> 
Verwandte Themen