보기 또는 해당 마스터를 찾을 수 없거나 검색된 위치를 지원하는보기 엔진이 없습니다.


80

다음과 같은 오류 : 'LoginRegister'보기 또는 해당 마스터를 찾을 수 없거나 검색된 위치를 지원하는보기 엔진이 없습니다. 다음 위치가 검색되었습니다.

~ / Views / MyAccount / LoginRegister.aspx

~ / Views / MyAccount / LoginRegister.ascx

~ / Views / Shared / LoginRegister.aspx

~ / Views / Shared / LoginRegister.ascx

~ / Views / MyAccount / LoginRegister.cshtml

~ / Views / MyAccount / LoginRegister.vbhtml

~ / Views / Shared / LoginRegister.cshtml

~ / Views / Shared / LoginRegister.vbhtml

사실 내 페이지 뷰 페이지는 ~/Views/home/LoginRegister.cshtml내가하는 일

RouteConfigIS

 public class RouteConfig
    {

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "MyAccount", action = "LoginRegister", id = UrlParameter.Optional }
            );
        }
    }

LoginResiter보기를 올바른 폴더로 이동하십시오 (MyAccount 컨트롤러의 경우).
Mansfield

제어 장치? 하지만 내 페이지는보기입니다
user2564537 2013-08-16

2
ASP.NET MVC에서는 특정 컨트롤러에 대한보기가 공유 폴더 또는 컨트롤러 이름이있는 폴더에있을 것으로 예상합니다. 보시다시피 "MyAccount"폴더와 "Shared"폴더를 찾고 있습니다. 컨트롤러에서보기를 사용하려면 해당 컨트롤러 이름으로 폴더에 배치해야합니다. 경로 구성과 관련이 없습니다.
Mansfield

8
사이트를 다른 컴퓨터에 게시 한 후이 오류가 발생했습니다. 보기로 설정 한에서 그것은 빌드 작업을 설정 None하는 대신 Content그 전환 및 재 게시 (또는 파일을 복사) 있도록했다.
Patrick

답변:


108

주의 모델 유형이 문자열 인 경우 보기 (문자열, 문자열)의 두 번째 매개 변수는 마스터 이름이 있기 때문에 모델이 없습니다 . 두 번째 매개 변수로 object (model)을 사용하여 오버로드를 호출해야 할 수 있습니다.

정확하지 않음 :

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",msg);
}

정답 :

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",(object)msg);
}

또는 (bradlis7 제공) :

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",model:msg);
}

16
캐스팅 대신 (object)msg인수를 명시 적으로 지정하십시오.return View("Message", model: msg);
bradlis7

1
이것은 훌륭한 답변입니다
JsonStatham

31

문제:

귀하의 View캔은 기본 위치에서 찾을 수 없습니다.

설명:

보기는 Controller또는 폴더와 같은 폴더 에 있어야 Shared합니다.

해결책:

어느 당신의 이동 View받는 MyAccount폴더 또는를 생성 HomeController.

대안 :

이동 View하거나 새로 만들고 싶지 않은 Controller경우이 링크 에서 확인할 수 있습니다 .


3
또한 내가 찾은이 문제가있는 경우보기 만 삭제하는 것이 가장 좋습니다. (내용을 notepadd ++에 복사) 컨트롤러로 이동 한 다음 작업 결과를 마우스 오른쪽 버튼으로 클릭하고 뷰 생성을 선택하면 컨트롤러가 뷰를 찾고있는 위치를 확인하고 그에 따라 뷰를 배치 할 수 있습니다.
Bill Blankenship

14

Microsoft ASP.net MVC에서 들어오고 나가는 URL 조합을 구문 분석하는 데 사용되는 라우팅 엔진은 구성보다 규칙이라는 개념으로 설계되었습니다. 이것이 의미하는 바는 라우팅 엔진이 사용하는 규칙 (규칙)을 따르는 경우 구성을 변경할 필요가 없다는 것입니다.

ASP.net MVC 용 라우팅 엔진은 웹 페이지 (.cshtml)를 제공하지 않습니다. 텍스트 / html을 출력 스트림으로 렌더링하거나 규칙을 사용하여 일관된 방식으로 .cshtml 파일을 구문 분석하고 제공 할 수있는 코드의 클래스가 URL을 처리하는 방법을 제공합니다.

라우팅에 사용되는 협약은 유사한 이름을 가진 클래스에 컨트롤러와 일치하는 것입니다 ControllerNameControllercontroller="MyAccount"수단이라는 이름의 클래스를 찾을 수 있습니다 MyAccountController. 다음으로 컨트롤러 클래스 내의 함수에 매핑되는 액션이 ​​나옵니다 ActionResult. 즉 , 컨트롤러의 클래스에서 action="LoginRegister"함수 public ActionResult LoginRegister(){}를 찾습니다 . 이 함수는 View()명명 규칙 LoginRegister.cshtml에 따라 /Views/MyAccount/폴더에 저장 되는를 반환 할 수 있습니다 .

요약하면 다음과 같은 코드가 있습니다.

/Controllers/MyAccountController.cs :

public class MyAccountController : Controller 
{
    public ActionResult LoginRegister()
    {
        return View();
    }
}

/Views/MyAccount/LoginRegister.cshtml :보기 파일.


8

보기를 반환 할 때 LoginRegister 작업에서 아래를 수행하십시오.이 작업은 mvc 5에서 수행 할 수 있다는 것을 알고 있습니다 .mvc 4에서도 확실하지 않습니다.

 public ActionResult Index()
 {
     return View("~/Views/home/LoginRegister.cshtml");
 }

5

보기 (.cshtml 파일)의 빌드 동작을 확인하십시오. 컨텐츠로 설정되어야합니다. 어떤 경우에는 빌드 작업이 (실수로) 없음으로 설정되었고이 특정보기가 유효한 폴더 아래의 Visual Studio 프로젝트 파일에있는 것을 보더라도 대상 컴퓨터에 배포되지 않았 음을 확인했습니다.


1
제 경우에는 "Build Action"속성과도 관련이 있었지만 "Embedded Resource"로 설정해야했습니다
Ali Tahouri

3

권한 문제 일 수 있습니다.

최근에 같은 문제가 발생했습니다. 테스트로 간단한 hello.html 페이지를 만들었습니다. 로드하려고 할 때 권한과 관련된 오류 메시지가 표시됩니다. 루트 웹 폴더의 권한 문제를 수정하면 html 페이지와 MVC 렌더링 문제가 모두 해결되었습니다.


내 경우에는 또한이 응용 프로그램과 읽기 전용 플래그 제거의 루트 폴더에 허용 인증 된 사용자 액세스는 문제 권한 문제 수정되었습니다
Momin

2

생성 한보기 (.ASPX 파일)가 컨트롤러에서 언급 한 이름과 동일한 지 확인합니다. 예 :

 public ActionResult GetView()
 {
    return View("MyView");
 }

이 경우 aspx 파일의 이름은 GetView.aspx 대신 MyView.aspx 여야합니다.


2

보기 (및 POST 작업)의 이름을 변경했기 때문에이 오류가 발생했습니다.

마지막으로 GET 및 POST 작업의 이름을 새 이름으로 바꾸는 것을 잊었습니다.

솔루션 : 보기 이름과 일치하도록 GET 및 POST 작업의 이름을 바꿉니다 .


1

프로덕션에서 간헐적으로 문제가 발생하는 경우 작업 방법이 중단 되었기 때문일 수 있습니다. 예를 들어, 대용량 파일 업로드와 관련된 POST 작업 중에 사용자는 업로드가 완료되기 전에 브라우저 창을 닫습니다. 이 경우 작업 메서드는 null 모델 또는 뷰 개체로 인해 null 참조 예외를 throw 할 수 있습니다. 해결책은 try / catch에서 메서드 본문을 래핑하고 null을 반환하는 것입니다. 이렇게 :

[HttpPost]
public ActionResult Post(...)
{
    try
    {
        ...
    }
    catch (NullReferenceException ex)  // could happen if POST is interrupted
    {
        // perhaps log a warning here
        return null;
    }

    return View(model);
}

1

나는 이와 같은 문제가 있었다. 보기 "영화"를 복사하고 그에 따라 "고객"으로 이름을 변경했습니다. 나는 또한 모델과 컨트롤러에 대해서도 똑같이했습니다.

해결 방법은 다음과 같습니다. Customer View의 이름을 Customer1로 변경하고 새보기를 만들고 Customer라고 이름을 지정했습니다. 그런 다음 Customer1 코드를 Customer에 복사했습니다.

이것은 효과가 있었다.

문제의 실제 원인을 알고 싶습니다.

UPDATE 그냥 미소를 짓기 위해 .... 돌아가서 모든 이름 변경 시나리오를 다시 복제했으며 오류가 발생하지 않았습니다.


0

위의 답변 (일반적인 실수)에서 모든 사항을 확인하고보기가 예외 위치에 있다고 확신하는 경우 Visual Studio 를 다시 시작 해야 할 수 있습니다 .

:(


0

제 경우에는 문제를 해결하기 위해 RedirectToAction을 사용해야했습니다.

[HttpGet]
[ControleDeAcessoAuthorize("Report/ExportToPDF")]
public ActionResult ExportToPDF(int id, string month, string output)
{
    try
    {
        // Validate
        if (output != "PDF")
        {
            throw new Exception("Invalid output.");
        }
        else
        {
            ...// code to generate report in PDF format
        }
    }
    catch (Exception ex)
    {
        return RedirectToAction("Error");
    }
}

[ControleDeAcessoAuthorize("Report/Error")]
public ActionResult Error()
{
    return View();
}

0

나는 얼마 전에 이것을 만났고 그것이 단순하다는 것이 밝혀 졌기 때문에 나를 미치게 만들었다. 그래서 내 뷰 내에서 http 요청을 통해 그리드에 대한 데이터를 얻은 그리드 컨트롤을 사용했습니다. 중간 계층이 내 요청을 완료하고 데이터 세트를 반환하면 동일한 오류가 발생했습니다. 내 반환 진술은 'return View (dataset);'였습니다. 대신 'return Json (dataset);


0

성명을 부적절하게 닫아서이 오류를 발견했습니다.

@using (Html.BeginForm ( "DeleteSelected", "Employee", FormMethod.Post))

{

} //이 중괄호는 끝에서 닫아야합니다.

Index.cshtml view file. 프로그램이 끝날 때 문을 닫지 않았습니다. 대신 부적절하게 닫히고이 오류가 발생했습니다.

Controller 메서드를 View에 제대로 반환했기 때문에 Controller ActionMethod 코드를 확인할 필요가 없다고 확신했습니다. 따라서 응답하지 않고 유사한 오류가 발생한 뷰 여야합니다.


0

파일이 존재하지 않는다는 것을 알기 전까지는이 문제에 대한 해결책을 찾을 수 없었습니다! 솔루션 탐색기에 파일이 표시되기 때문에 알아내는 데 오랜 시간이 걸렸습니다!

여기에 이미지 설명 입력

하지만 Index.cshtml을 클릭하면이 오류가 발생합니다.

여기에 이미지 설명 입력

이것이이 오류가 나타나는 이유입니다. 이 답변이 누군가에게 도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.