2010-02-03 3 views
1

알 수없는 작업을 처리하는 컨트롤러가 내 사이트에 있고보기가 있으면 반환합니다. 이는 컨트롤러를 수정하지 않고도 사이트의 특정 영역에 정적 컨텐츠를 추가 할 수 있도록하기위한 것입니다. 지금 직면 한 문제는 이러한 "알 수없는"모든보기에 대한 링크가 포함 된 sitemap.xml 파일을 만드는 것입니다. 사이트 맵을 생성하는 내 메서드에서 이러한 정적 콘텐츠 뷰를 열거하는 가장 좋은 방법은 무엇입니까? 난 그냥 것,ASP.NET MVC : 사용 가능한 뷰를 모두 얻으려면 어떻게해야합니까?

protected override void HandleUnknownAction(string actionName) 
{ 
    GetUnknownActionResult(actionName).ExecuteResult(ControllerContext); 
} 

[NonAction] //public so it is testable 
public ActionResult GetUnknownActionResult(string actionName) 
{ 
    var result = View(actionName); 

    if (result.ViewEngineCollection.Any(engine => engine.FindView(ControllerContext, result.ViewName, null, true).View != null)) 
    { 
     return result; 
    } 

    return new HttpNotFoundResult(); 
} 
+1

정적 컨텐츠? 왜 그것을 htm 파일로 콘텐츠 폴더 (또는 그 하위 폴더)에 넣지 않았습니까? – tvanfosson

+0

콘텐츠는 마스터 페이지 (동적 요소가 있음)의 컨텍스트에 표시해야하므로 실제로 정적 인 것은 아닙니다. 하지만 문제는 디자인 문제 일 수 있으며 HTML을 마스터에로드하는 것을 고려해야합니다. 그래도 질문을 변경하지 않습니다 ... 여전히 특정 컨트롤러와 관련된보기를 열거하는 "최상의"방법을 알고 싶습니다. 지금은 View.MapPath()에보기 폴더에 하드 코딩 된 문자열을 붙여 놓았습니다. 이것이 최선의 방법이라면, 그렇게하십시오. – mkedobbs

답변

1

당신이 그런 "정적 콘텐츠"디렉토리에서이 .htm 파일과 .PDF 파일로 정적 콘텐츠를 제공하는 경우 :

아래의 코드는 내가 알 수없는 행동에 대한 뭐하는 거지 보여줍니다 System.File.IO을 사용하여 해당 파일을 열거하고 링크를 작성하십시오.

+0

이들은 마스터 페이지를 사용하는보기이기 때문에 진정한 정적 컨텐츠가 아닙니다. System.File.IO를 사용하여 디렉토리를 읽는 데 아무런 문제가 없지만 뷰를 열거하는 더 좋은 방법이 있었으면합니다. – mkedobbs

+1

여기에 XML Sitemap Helper가 있습니다. http://www.asp-net-mvc.com/MvcHelpers/XmlSitemap,하지만 귀하의 상황에 적용되는지 모르겠습니다. –

관련 문제