2009-10-07 2 views
3

직장에서 내 응용 프로그램의 모든 페이지에 최종 수정 날짜를 포함시켜야합니다. 이전 WebForms 마스터 페이지의 맨 아래에 현재 .aspx 페이지의 마지막 수정 날짜를 반환하는 < % = LastModified %>에 대한 참조를 포함하여이 작업을 수행했습니다. 내 코드는 관련 .aspx.cs 파일을 검사하고 마지막 수정 날짜를 비교하며 가장 최근 날짜를 반환합니다.마지막으로 수정 한 날짜/FileInfo보기 ASP.NET MVC

MVC보기의 FileInfo를 읽을 수있는 사람은 누구입니까? 가능한 경우 마스터 페이지에 포함하고 싶습니다.

나는 모든 유선 접속이 가능하고 준비가 된 기본 컨트롤러를 가지고 있습니다. 필자가 알아야 할 것은 현재 뷰의 FileInfo에 액세스하는 방법뿐입니다.

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

컨트롤러에 대한 기본보기가 없습니다. Controller는 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 년에 물었고, 2 년 후인 2011 년에 처음 (틀린) 대답을 얻었습니다. 그 후 2 년 뒤에는 (일하고 생각하지만 꽤 관련이 있습니다) 두 번째 대답을 얻었습니다. 그리고 지금, 그 2 년 후, 나는 (더 간단한) 대답을 올렸습니다. (나는 이것에 관해 많은 rep 지점을 울릴 것이다라고 생각하지 않는다. ..) –

+1

이것은 정말로 도움이되었다. 더 나은 표현을 위해'.GetLastWriteTime (...). ToLongDateString()'을 추가 할 수 있습니다. – roland