2009-10-07 6 views
3

Je dois inclure la dernière date de modification sur chaque page de mes applications au travail. J'avais l'habitude de faire ceci en incluant une référence à <% = LastModified%> au fond de ma page principale de WebForms qui retournerait la dernière date modifiée de la page .aspx courante. Mon code vérifie même le fichier .aspx.cs associé, compare les dernières dates modifiées et renvoie la date la plus récente.ASP.NET MVC obtenir la date de dernière modification/FileInfo of View

Est-ce que quelqu'un sait si vous pouvez lire le FileInfo d'une vue MVC? Je voudrais l'inclure dans la page principale, si possible.

J'ai un contrôleur de base qui est câblé et prêt à fonctionner. Tout ce que j'ai besoin de savoir, c'est comment accéder à FileInfo de la vue actuelle.

namespace MyMVCApp.Controllers 
{ 
    public abstract class SiteController : Controller 
    { 
     public SiteController() 
     { 
      ViewData["modified"] = NEED TO GET FILEINFO OF CURRENT VIEW HERE; 
     } 
    } 
} 
+0

Il n'y a pas vue par défaut pour le contrôleur. Le contrôleur peut afficher n'importe quelle vue appelant View ("view_name"). –

+0

La date de modification provient-elle uniquement de la dernière date de modification de .aspx (la vue)? Vous pourriez probablement faire quelque chose là-bas mais habituellement ce genre de choses (la date de la dernière modification) vient de votre stockage persistant. Est-ce que votre site ne sera pas piloté par une base de données mais plutôt un site statique? – Charlino

Répondre

1

Ce qui suit vous donnera la date de la dernière fois que l'avis a été écrit:

// Last Modified Date 
var strPath = Request.PhysicalPath; 
ViewBag.LastUpdated = System.IO.File.GetLastWriteTime(strPath).ToString(); 

que je Remarqué ViewBag au lieu de ViewData.

+0

Avez-vous déjà essayé cela? Le nom de la vue est déterminé plus tard, il n'est jamais disponible ici. –

0

Essayez ceci:

private DateTime? GetDate(string controller, string viewName) 
{ 
    var context = new ControllerContext(Request.RequestContext, this); 
    context.RouteData.Values["controller"] = controller; 
    var view = ViewEngines.Engines.FindView(context, viewName, null).View as BuildManagerCompiledView; 
    var path = view == null ? null : view.ViewPath; 
    return path == null ? (DateTime?) null : System.IO.File.GetLastWriteTime(path); 
} 
5

Vous devez connaître le fichier physique de la vue, qui est connu que lorsque la vue est en cours de traitement, de sorte que nous retarder le travail jusque-là:

A le fond du fichier de vue, il suffit d'ajouter:

Last Modified Date: @File.GetLastWriteTime(this.Server.MapPath(this.VirtualPath)) 

NOTE: Il doit être dans le fichier de vue que vous souhaitez la date. Si vous le mettez dans le fichier de disposition, il vous donnera la date de ce fichier. Cependant, vous pouvez obtenir la date dans le pied de page en utilisant un section

En Vue:

@section lastwrite 
{ 
    Last Modified Date: @File.GetLastWriteTime(this.Server.MapPath(this.VirtualPath)) 
} 

dans la mise en page:

@RenderSection("lastwrite", required: false) 
+0

Hmmm ... La question a été posée en 2009, a obtenu sa première (mauvaise) réponse deux ans plus tard en 2011, a obtenu sa deuxième réponse (travailler, je pense, mais très impliqué) répondre deux ans après cela. Et maintenant, deux ans après CELA, j'ai posté ma réponse (plus simple). (Ne pense pas que je vais appeler beaucoup de points de rep pour ça ...) –

+1

C'était très utile. Pour une meilleure représentation, vous pouvez ajouter '.GetLastWriteTime (...). ToLongDateString()'. – roland

Questions connexes