developer tip

ASP.NET MVC에 뷰가 있습니까?

optionbox 2020. 9. 1. 07:27
반응형

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

반응형