ASP.NET MVC получает дату последнего изменения / FileInfo of View - PullRequest
4 голосов
/ 07 октября 2009

Мне необходимо указывать дату последнего изменения на каждой странице моих приложений на работе. Раньше я делал это, добавляя ссылку на <% = LastModified%> внизу моей главной страницы WebForms, которая возвращала бы дату последнего изменения текущей страницы ASPX. Мой код будет даже проверять связанный файл .aspx.cs, сравнивать даты последнего изменения и возвращать самую последнюю дату.

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

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

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

Ответы [ 3 ]

6 голосов
/ 01 сентября 2015

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

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

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)
1 голос
/ 07 сентября 2011

Ниже приведена дата последней записи вида:

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

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

0 голосов
/ 09 декабря 2013

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

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...