반응형
ASP.NET MVC에 뷰가 있습니까?
뷰를 렌더링하기 전에 컨트롤러 내에서 특정 뷰 이름이 있는지 확인할 수 있습니까?
렌더링 할 뷰의 이름을 동적으로 결정해야합니다. 해당 이름의 뷰가 있으면 해당 뷰를 렌더링해야합니다. 사용자 정의 이름으로보기가 없으면 기본보기를 렌더링해야합니다.
컨트롤러 내에서 다음 코드와 유사한 작업을 수행하고 싶습니다.
public ActionResult Index()
{
var name = SomeMethodToGetViewName();
// The 'ViewExists' method is what I've been unable to find.
if (ViewExists(name))
{
retun View(name);
}
else
{
return View();
}
}
private bool ViewExists(string name)
{
ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext, name, null);
return (result.View != null);
}
복사 / 붙여 넣기 확장 방법을 찾는 사람들을 위해 :
public static class ControllerExtensions
{
public static bool ViewExists(this Controller controller, string name)
{
ViewEngineResult result = ViewEngines.Engines.FindView(controller.ControllerContext, name, null);
return (result.View != null);
}
}
하나의 뷰 엔진 만 사용한다고 가정하고 다음과 같은 것을 시도하는 것은 어떻습니까?
bool viewExists = ViewEngines.Engines[0].FindView(ControllerContext, "ViewName", "MasterName", false) != null;
여기에 [반드시 권장되는 것은 아님] 다른 방법이 있습니다.
try
{
@Html.Partial("Category/SearchPanel/" + Model.CategoryKey)
}
catch (InvalidOperationException) { }
Dave가 제공 한 솔루션을 기반으로 여러 컨트롤러 조치에서이를 재사용하려는 경우 다음과 같이 사용자 정의보기 결과를 정의 할 수 있습니다.
public class CustomViewResult : ViewResult
{
protected override ViewEngineResult FindView(ControllerContext context)
{
string name = SomeMethodToGetViewName();
ViewEngineResult result = ViewEngines.Engines.FindView(context, name, null);
if (result.View != null)
{
return result;
}
return base.FindView(context);
}
...
}
Then in your action simply return an instance of your custom view:
public ActionResult Index()
{
return new CustomViewResult();
}
ViewEngines.Engines.FindView(ViewContext.Controller.ControllerContext, "View Name").View != null
My 2 cents.
참고URL : https://stackoverflow.com/questions/946990/does-a-view-exist-in-asp-net-mvc
반응형
'developer tip' 카테고리의 다른 글
람다 함수 또는 중첩 함수 ( 'def') 중 어느 것이 더 선호됩니까? (0) | 2020.09.01 |
---|---|
언제 가상 소멸자를 사용하지 말아야합니까? (0) | 2020.09.01 |
CSS "and"및 "or" (0) | 2020.09.01 |
다중 처리 : 여러 프로세스간에 사전을 공유하려면 어떻게합니까? (0) | 2020.09.01 |
List.of와 Arrays.asList의 차이점은 무엇입니까? (0) | 2020.09.01 |