【问题标题】:ASP.NET MVC getting last modified date/FileInfo of ViewASP.NET MVC 获取视图的最后修改日期/文件信息
【发布时间】:2009-10-07 04:03:58
【问题描述】:

我需要在我的工作申请的每一页上注明最后修改日期。我曾经通过在我的 WebForms 母版页底部包含对 的引用来执行此操作,这将返回当前 .aspx 页面的最后修改日期。我的代码甚至会检查关联的 .aspx.cs 文件,比较最后修改的日期,并返回最近的日期。

有人知道您是否可以读取 MVC 视图的 FileInfo 吗?如果可能,我想将它包含在母版页中。

我有一个基本控制器,所有控制器都已连接好,可以使用了。我只需要知道如何访问当前视图的 FileInfo。

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

【问题讨论】:

  • 控制器没有默认视图。控制器可以显示任何调用 View("view_name") 的视图。
  • 修改日期是否纯粹来自 .aspx(视图)的最后修改日期?您可能可以在那里做一些事情,但通常那种东西(最后修改日期)来自您的持久存储。您的网站不会是数据库驱动的,而是更多的静态网站吗?

标签: asp.net-mvc master-pages last-modified fileinfo


【解决方案1】:

你需要知道View的物理文件,只有在处理view的时候才知道,所以我们把工作推迟到那个时候:

在视图文件的底部,只需添加:

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)

【讨论】:

  • 嗯...这个问题是在 2009 年提出的,两年后的 2011 年得到了第一个(错误)答案,两年后得到了第二个(我认为是有效的,但相当复杂)的答案.现在,在那之后的两年,我发布了我的(更简单的)答案。 (不要以为我会在这件事上获得很多代表点......)
  • 这真的很有帮助。为了更好地表示你可以添加.GetLastWriteTime(...).ToLongDateString()
【解决方案2】:

以下将为您提供上次编写视图的日期:

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

注意到我使用了 ViewBag 而不是 ViewData。

【讨论】:

  • 你试过这个吗?视图名称稍后确定,此处永远不可用。
【解决方案3】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-26
    • 2010-09-17
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    相关资源
    最近更新 更多