tutorial - microsoft asp.net mvc 4
ASP.Net MVC-No se puede encontrar el error del recurso (21)
Soy completamente nuevo en ASP.Net MVC. Acabo de crear un proyecto MVC3 en Visual Studio 2010. El motor de visualización es una afeitadora. Cuando acabo de ejecutar la aplicación, dio el resultado correcto en el navegador. La URL es http://localhost:4163/ . Luego apliqué "Establecer como página de inicio" a Index.cshtml dentro de la carpeta ~ / Views / Home. Luego, cuando ejecuté la aplicación, la url se convirtió en http://localhost:4148/Views/Home/Index.cshtml y decía que no se podía encontrar el recurso. ¿Qué debo hacer para corregirlo? ¿Dónde se realiza el mapeo de url?
Archivo Global.asax:
using System.Web.Mvc;
using System.Web.Routing;
namespace TEST
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
}
(MVC 5): Cambie RouteConfig.cs
para incluir dos routes
como esta:
routes.MapRoute(
name: "DefaultWithLanguage",
url: "{language}/{controller}/{action}/{id}",
defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional },
constraints: new {language= "[a-z]{2}"}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
así que cuando la parte del lenguaje de la ruta no está especificada no confunde los nombres del controlador que no coinciden con la expresión regular "[az]{2}"
y reemplaza el idioma predeterminado y redirige al resto de la ruta ...
Asegúrese de haber creado una clase HomeController.cs en la carpeta de su controlador.
Bueno, no puedes configurar la página predeterminada en asp.net mvc.
Vaya a global.asax.cs y vea la definición de enrutamiento. La ruta predeterminada apunta al método Index HomeController.
Será mejor que vea algunas películas cortas sobre asp.net mvc o intente encontrar el tutorial de la cena nerd , que lo familiarizará con el marco rápidamente.
Creo que las mejores respuestas sobre los tutoriales ya se proporcionaron como respuestas a esta pregunta:
En asp.net mvc no puede usar la opción ''establecer como página de inicio'', porque las vistas de mvc no son independientes, como las páginas de formularios web. Solo se muestran los archivos de plantilla para mostrar su modelo. No tienen procesamiento de módulo http. Todas las solicitudes web deben pasar por las acciones del controlador, no puede solicitar vistas directamente.
En un problema similar al que me enfrenté, mi Acción tenía un atributo HTTP "POST", pero estaba intentando abrir la página (de manera predeterminada es "GET").
Entonces tuve que crear una versión HTTP "GET".
La página de inicio del proyecto asp.net mvc es "Página actual" por defecto. Simplemente abra un archivo del lado del servidor y comience el proyecto. de esa manera mvc abre el controlador predeterminado que es homecontroller para su proyecto
Mapeo URL o "enrutamiento" es manejado por Global.asax en la raíz de su sitio ASP.NET MVC.
Cuando hace clic en "Establecer como página de inicio", cambia la configuración del proyecto para buscar ese archivo en relación con la raíz de la aplicación. Pero en MVC la ruta predeterminada a su página de índice es en realidad http://localhost:4163/Home/Index
- lea algo como this para tener una idea de cómo funciona el enrutamiento.
Para "arreglar" su proyecto ahora que intenta (y falla) navegar a la vista directamente, haga clic con el botón derecho en el proyecto y elija " Properties
", haga clic en la pestaña " Web
" y elija " Specific Page
", dejando el cuadro de texto en blanco. Ahora, cuando empiece a depurar, debería volver a la página de inicio; mire los parámetros de ruta predeterminados para ver por qué en el método RegisterRoutes en Global.asax
Para mí, el problema fue causado por un problema de espacio de nombres.
Había actualizado el espacio de nombres de mi proyecto en las clases de mi proyecto web de MyProject a MyProject.Web, pero olvidé actualizar las Propiedades del proyecto >> Espacio de nombre predeterminado. Por lo tanto, cuando agregué un nuevo controlador, estaba usando el antiguo espacio de nombres. Todo lo que tenía que hacer era corregir el espacio de nombres en el nuevo controlador y funcionó.
Para ver tu Vista así:
http://localhost:1234/x/MyView
En el archivo xController.cs, en la carpeta Controladores,
asegúrese de agregar un método ActionResult como este:
public ActionResult MyView()
{
return View(whatever);
}
También recibí este mensaje cuando no hacía referencia al nombre de mi modelo correctamente:
@using (Html.BeginForm ("MyView", "MyModel", FormMethod.Get))
Puede cambiar la página de inicio dentro de las propiedades de su proyecto (proyecto -> propiedades del proyecto). Debajo de la pestaña web puede seleccionar specify page
y cambiar su página de inicio a home/
or home/index
. Esto lo dirigirá a la página correcta según sus rutas. La dirección de http://localhost:4148/Views/Home/Index.cshtml no funciona específicamente porque se maneja según las rutas que indican que la url necesita ser http://localhost:4148/ {controller } / {acción} y un opcional / {id}.
Si desea obtener más información acerca del enrutamiento, eche un vistazo here.
Resolvió el problema haciendo clic con el botón derecho en la vista que quería como página de inicio. Después de mostrar el error "El recurso que está buscando no se puede encontrar" Simplemente haga clic derecho en su proyecto, vaya a la web y seleccione Página actual. Eso resolverá el problema
Si está utilizando IIS Express. Puede ser que haya abierto otro proyecto que usa el mismo directorio virtual. Cuando abrió la segunda solución VS reasigna ese directorio de IIS a otra ubicación. Como resultado, no funcionará con diferentes problemas. Tuve el mismo error como tema de inicio.
Para solucionarlo: cierre todas las instancias de VS Studio. Abra VS con el proyecto que está trabajando y reconstruya.
Si ha probado todas las soluciones anteriores y el problema persiste, entonces use esta solución simple. Abra el depurador de Facebook desde este link , escriba la URL de la página y haga clic en Obtener el nuevo botón Información de raspado. Esto resolverá su problema.
La razón detrás (lo que creo) es que facebook api guarda el estado actual de la página y muestra lo mismo desde su propio servidor. si hace clic en el botón Compartir durante la codificación y su página no se carga, la API de Facebook no pudo encontrar esa página en el servidor y guarda el estado de la página como "recurso no encontrado". Ahora seguirá mostrando el mismo mensaje incluso después de subir la página. Cuando recupera la página del depurador Facebook, resuelve todo desde cero y guarda el estado actual de la página y luego su botón Compartir comienza a funcionar sin ningún cambio en la codificación.
Siga los pasos a continuación para ejecutar su aplicación asp.net mvc.
Creación de controlador
Haga clic derecho en la carpeta de controladores y agregue el controlador. Nota: no elimine el postfix del controlador. Sus convenciones ASP.NET MVC.
Dé nombre al controlador como "DemoController" y puede ver que la acción "Índice" está presente en "DemoController". "Índice" es una acción predeterminada presente cuando creará un controlador.Ver creación
Al hacer clic con el botón derecho en el nombre de la acción "Índice", se conserva el nombre de vista predeterminado, es decir, "Índice" y se hace clic en el botón "Agregar".Configuración de ruta
Abra el archivo Global.asax, verá que la configuración predeterminada de la ruta está asignada al controlador "Inicio" y la acción "Índice" la cambia a la acción "Demo" y al control "Demo". La asignación de URL está escrita en el archivo Global.asax. Cuando abras el archivo Global.asax, verás la siguiente configuración:routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults );
Cambiarlo a:
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Demo", action = "Index", id = UrlParameter.Optional } // Parameter defaults );
Y ejecute su aplicación, puede ver su aplicación funcionando.
Solo agregue este: si alguien tiene problemas en los que la página de índice en el Home Controller ya no se carga, puede deberse a que aún no ha configurado su StartUp Project . Haga clic con el botón derecho en el proyecto en el que desea que empiece su aplicación y configúrelo como el proyecto de inicio, y debería estar listo para comenzar.
Tenía el mismo tipo de problema, excepto que no estaba usando el nombre Index.cshtml
para mi View
, lo hice, por ejemplo, LandingPage.cshtml
, mi problema era que ActionResult
en mi Controller no era el mismo nombre que mi View Name ( En este caso mi ActionResult se llamó Index ()) - Esto es realmente obvio y un error tonto de mi parte, pero soy nuevo para MVC, por lo que voy a fallar con lo básico aquí y allá.
Entonces, en mi caso, necesitaba cambiar mi ActionResult
para que fuera el mismo nombre que mi View
: LandingPage.cshtml
public ActionResult LandingPage()
{
ProjectDetailsViewModels PD = new ProjectDetailsViewModels();
List<ProjectDetail> PDList = new List<ProjectDetail>();
PDList = GetProductList();
PD.Projectmodel = PDList;
return View(PD);
}
Soy nuevo en MVC, así que quizás esto ayude a alguien más que sea nuevo y tenga problemas con lo mismo que yo.
Tenía un controlador llamado usersController, así que traté de crearlo en la página de inicio cambiando el controlador predeterminado de Home a usersController como se indica a continuación.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "usersController", action = "Index", id = UrlParameter.Optional }
);
}
La solución fue cambiar el valor predeterminado del controlador para los usuarios en lugar de los usuariosController
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "users", action = "Index", id = UrlParameter.Optional }
);
}
Tuve un problema similar hace algún tiempo cuando usé VS 2012. Resuelto con solo Reconstruir la aplicación haciendo clic en Build> Rebuild.
Yo también recibí el mismo error html-404:
No se puede encontrar el recurso. Descripción: HTTP 404. El recurso que está buscando (o una de sus dependencias) podría haberse eliminado, haber cambiado su nombre o no estar disponible temporalmente. Revise la siguiente URL y asegúrese de que esté escrita correctamente.
Pero después de un examen minucioso, descubrí que había dejado el nombre del controlador como Default1Controller
lugar de cambiarlo a HomeController
. Cuando realicé el cambio y depuré la aplicación, funcionó. Espero que te ayude si tienes el mismo problema.
en la barra de direcciones en la entrada del navegador como esta: ControllerName / ActionMethod no ingresa ControllerName / ViewName por ejemplo en la barra de direcciones: http://localhost:55029/test2/getview Código de archivo cshtml:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>MyView</title>
</head>
<body>
<div>
</div>
</body>
</html>
y código de archivo cs:
public ActionResult GetView()
{
return View("MyView");
}