No se encontró la vista o su maestro o ningún motor de vista admite las ubicaciones buscadas

80

Error como: No se encontró la vista 'LoginRegister' o su maestro o ningún motor de vista admite las ubicaciones buscadas. Se buscaron las siguientes ubicaciones:

~ / Vistas / Mi cuenta / LoginRegister.aspx

~ / Vistas / Mi cuenta / LoginRegister.ascx

~ / Vistas / Compartido / LoginRegister.aspx

~ / Vistas / Compartido / LoginRegister.ascx

~ / Views / MyAccount / LoginRegister.cshtml

~ / Views / MyAccount / LoginRegister.vbhtml

~ / Views / Shared / LoginRegister.cshtml

~ / Views / Shared / LoginRegister.vbhtml

En realidad, mi página de vista de página es ~/Views/home/LoginRegister.cshtmllo que hago

y mi RouteConfiges

 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 }
            );
        }
    }
user2564537
fuente
Mueva la vista LoginResiter a la carpeta correcta (para el controlador MyAccount).
Mansfield
¿Controlador? Pero mi página está vista
user2564537
2
ASP.NET MVC espera que las vistas de un controlador específico estén en la carpeta compartida o en una carpeta con el nombre del controlador. Como puede ver, busca en la carpeta "Mi cuenta" y la carpeta "Compartida". Si desea utilizar una vista en un controlador, debe colocarla en la carpeta con ese nombre de controlador. No tiene nada que ver con la configuración de su ruta.
Mansfield
8
Recibí este error después de publicar un sitio en otra computadora. Resultó que la acción Crear en la vista estaba configurada en Nonelugar de Contentcambiarlos y volver a publicar (o simplemente copiar el archivo) funcionó.
Patrick

Respuestas:

108

Tenga cuidado si su tipo de modelo es String porque el segundo parámetro de View (string, string) es masterName, no model . Es posible que deba llamar a la sobrecarga con el objeto (modelo) como segundo parámetro:

Incorrecto :

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

Correcto:

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

O (proporcionado por bradlis7):

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",model:msg);
}
Nigrimmist
fuente
16
En lugar de emitir (object)msg, especifique el argumento explícitamente:return View("Message", model: msg);
bradlis7
1
Esta es una gran respuesta
JsonStatham
31

Problema:

No Viewse puede encontrar tu en ubicaciones predeterminadas.

Explicación:

Las vistas deben estar en la misma carpeta con el nombre Controllero en la Sharedcarpeta.

Solución:

Mueva su Viewa la MyAccountcarpeta o cree un archivo HomeController.

Alternativas:

Si no desea mover su Viewo crear uno nuevo Controller, puede consultar este enlace .

glautrou
fuente
3
Además, si tiene este problema que he encontrado, es mejor eliminar su vista. (copie su contenido en notepadd ++) Vaya a su controlador y luego haga clic derecho en su resultado de acción y seleccione generar vista, luego podrá ver dónde estaba buscando su controlador para su vista y colocar sus vistas en consecuencia.
Bill Blankenship
14

En Microsoft ASP.net MVC, el motor de enrutamiento, que se utiliza para analizar las combinaciones de URL entrantes y salientes, está diseñado con la idea de Convención sobre configuración. Lo que esto significa es que si sigue la Convención (reglas) que usa el motor de enrutamiento, no tiene que cambiar la Configuración.

El motor de enrutamiento de ASP.net MVC no ofrece páginas web (.cshtml). Proporciona una forma de que una URL sea manejada por una clase en su código, que puede representar texto / html en el flujo de salida, o analizar y entregar los archivos .cshtml de una manera consistente usando la Convención.

La convención que se utiliza para el enrutamiento es hacer coincidir un controlador con una clase con un nombre similar, ControllerNameControlleres decir, controller="MyAccount"significa buscar la clase nombrada MyAccountController. Luego viene la acción, que se asigna a una función dentro de la Clase de controlador, que generalmente devuelve un ActionResult. es decir action="LoginRegister", buscará una función public ActionResult LoginRegister(){}en la clase del controlador. Esta función puede devolver un View()que sería nombrado por Convención LoginRegister.cshtmly se almacenaría en el/Views/MyAccount/ carpeta.

Para resumir, tendrías el siguiente código:

/Controllers/MyAccountController.cs:

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

/Views/MyAccount/LoginRegister.cshtml: su archivo de vista.

Claies
fuente
8

En su acción LoginRegister al devolver la vista, haga lo siguiente, sé que esto se puede hacer en mvc 5, no estoy seguro si también en mvc 4.

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

Verifique la acción de compilación de su vista (archivo .cshtml). Debe configurarse como contenido. En algunos casos, he visto que la acción de compilación se estableció en Ninguno (por error) y esta vista en particular no se implementó en la máquina de destino a pesar de que ve esa vista presente en el archivo de proyecto de Visual Studio en una carpeta válida

Kapil
fuente
1
En mi caso, también estaba relacionado con la propiedad "Build Action", pero necesitaba establecerlo en "Embedded Resource"
Ali Tahouri
3

Esto podría ser un problema de permisos.

Tuve el mismo problema recientemente. Como prueba, creé una simple página hello.html. Cuando intenté cargarlo, recibí un mensaje de error con respecto a los permisos. Una vez que solucioné el problema de permisos en la carpeta web raíz, se resolvieron tanto la página html como los problemas de representación de MVC.

pez lípido
fuente
En mi caso, también fue un problema de permisos, permitió el acceso de usuarios autenticados a la carpeta raíz de la aplicación y la eliminación de la bandera de solo lectura solucionó el problema
Momin
2

Compruebe si la vista (archivo .ASPX) que ha creado tiene el mismo nombre que se menciona en el controlador. Por ejemplo:

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

En este caso, el archivo aspx debería tener el nombre MyView.aspx en lugar de GetView.aspx

Manoj CM
fuente
2

Recibí este error porque cambié el nombre de mi Vista (y la acción POST).

Finalmente descubrí que olvidé cambiar el nombre de las acciones GET y POST a un nuevo nombre.

Solución : cambie el nombre de las acciones GET y POST para que coincidan con el nombre de la vista.

Saeed Mousavi
fuente
1

Si el problema ocurre de forma intermitente en producción, podría deberse a la interrupción de un método de acción. Por ejemplo, durante una operación POST que implica la carga de un archivo grande, el usuario cierra la ventana del navegador antes de que se complete la carga. En este caso, el método de acción puede lanzar una excepción de referencia nula resultante de un modelo nulo o un objeto de vista. Una solución sería envolver el cuerpo del método en un try / catch y devolver null. Me gusta esto:

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

    return View(model);
}
Tawab Wakil
fuente
1

Tuve el mismo problema. Había copiado una vista "Película" y le había cambiado el nombre "Cliente" en consecuencia. También hice lo mismo con los modelos y los controladores.

La resolución fue esta ... Cambié el nombre de la Vista del cliente a Cliente1 y acabo de crear una nueva vista y la llamé Cliente ... Luego, simplemente copié el código de Cliente1 en Cliente.

Esto funcionó.

Me encantaría saber la verdadera causa del problema.

ACTUALIZACIÓN Solo por sonrisas ... Volví y repuse todo el escenario de cambio de nombre nuevamente ... y no obtuve ningún error.

Chris Catignani
fuente
0

Si ha comprobado todas las cosas de las respuestas anteriores (que son errores comunes) y está seguro de que su vista está en la ubicación de las excepciones, es posible que deba reiniciar Visual Studio.

:(

JDandChips
fuente
0

En mi caso, necesitaba usar RedirectToAction para resolver el problema.

[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();
}
Genivan
fuente
0

Me encontré con esto hace un tiempo y me volvió loco porque resultó ser simple. Entonces, dentro de mi Vista, estaba usando un control de cuadrícula que obtenía datos para la cuadrícula a través de una solicitud http. Una vez que el nivel intermedio completó mi solicitud y devolvió el conjunto de datos, recibí el mismo error. Resulta que mi declaración de devolución fue 'return View (conjunto de datos);' en lugar de 'return Json (conjunto de datos);

indianapolymath
fuente
0

Me encontré con este error debido al cierre incorrecto de la declaración,

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

{

} // Este corchete debe cerrarse al final.

En el archivo de vista Index.cshtml, no cerré la declaración al final del programa. en cambio, terminé cerrando incorrectamente y encontré este error.

Estaba seguro de que no era necesario verificar el código del método de acción del controlador porque he devuelto el método del controlador correctamente a la vista. Así que tiene que ser la vista la que no responde y se encuentra con un error similar.

Abhishek
fuente
0

No pude encontrar ninguna solución a este problema, ¡hasta que descubrí que los archivos no existían! Me tomó mucho tiempo averiguarlo, ¡porque el Explorador de soluciones muestra los archivos!

ingrese la descripción de la imagen aquí

Pero cuando hago clic en Index.cshtml, aparece este error:

ingrese la descripción de la imagen aquí

Así que esa fue la razón por la que se mostró este error. Espero que esta respuesta ayude a alguien.

Cerveser
fuente