2009-10-07 3 views
3

Я должен включать последнюю измененную дату на каждую страницу моих приложений на работе. Я использовал это, включив ссылку на <% = LastModified%> в нижней части моей главной страницы WebForms, которая вернет последнюю измененную дату текущей страницы .aspx. Мой код даже проверял связанный файл .aspx.cs, сравнивал последние измененные даты и возвращал самую последнюю дату.ASP.NET MVC, получающий последнюю измененную дату/FileInfo of View

Кто-нибудь знает, можете ли вы прочитать FileInfo в представлении MVC? Я хотел бы включить его на главную страницу, если это возможно.

У меня есть базовый контроллер, который все подключен и готов к работе. Все, что мне нужно знать, - это получить доступ к FileInfo текущего представления.

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

Там нет вида не по умолчанию для контроллера. Контроллер может отображать любой вид, вызывающий View («view_name»). –

+0

Является ли измененная дата исключительно исходящей из последнего изменения даты .aspx (вид)? Возможно, вы могли бы что-то там сделать, но обычно такие вещи (последняя измененная дата) поступают из вашего постоянного хранилища. Ваш сайт не будет управляться базой данных, а скорее статическим сайтом? – Charlino

ответ

1

Следующие даст вам дату последнего времени представление было написано:

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

Заметили, что я использовал ViewBag вместо ViewData.

+0

Вы даже пробовали это? Имя вида определяется позже, оно никогда не доступно здесь. –

0

Попробуйте это:

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

Вы должны знать физический файл с видом, который известен только тогда, когда вид обрабатывается, поэтому мы не задерживать работу до тех пор:

В в нижней части файла для просмотра просто добавьте:

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

ПРИМЕЧАНИЕ: оно должно быть в файле вида, в котором вы хотите указать дату. Если вы поместите его в файл макета, он даст вам дату этого файла. Тем не менее, вы можете получить дату в сноску, используя section

В Виде:

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

в макете:

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

Хммм ... Вопрос был задан в 2009 году, получил первый (неправильный ответ) два года спустя в 2011 году, получил второй (работает, я думаю, но довольно вовлечен) ответ через два года после этого. И теперь, спустя два года после этого, я отправил свой (более простой) ответ. (Не думайте, что я собираюсь позвонить по многим точкам на этом ...) –

+1

Это было действительно полезно. Для лучшего представления вы можете добавить '.GetLastWriteTime (...). ToLongDateString()'. – roland

Смежные вопросы