asp.net mvc - varias - No se encontró un método de acción pública ''..'' en el controlador ''..''
pasar viewbag de vista a controlador (5)
Quería poner una imagen al azar en cada página de visualización de mi proyecto mvc. Así que creé un método que devuelve una Vista parcial y llamo a ese método en la página de Diseño compartido.
Esto funciona bien cuando intento iniciar sesión con un nombre de usuario y contraseña correctos. El usado se registra y cada página contiene una imagen aleatoria. Pero cuando doy la combinación inválida de nombre de usuario y contraseña. La página de diseño compartido no encuentra el controlador al que quiero llamar con mi @Html.Action
y, de hecho, la vista de inicio de sesión debe devolverse con un mensaje de error "combinación no válida de nombre de usuario y contraseña" y, por supuesto, con la imagen al azar.
InnerException:
{"No se encontró un método de acción pública ''RandomSponsor'' en el controlador ''Project.WebUI.Controllers.HomeController''."}
Mi Html.Acción en diseño compartido.
@Html.Action("RandomSponsor", "Home")
Método en homecontroller.
[HttpGet]
[ChildActionOnly]
public ActionResult RandomSponsor()
{
var model = service.getRandomSponsor();
return PartialView("RandomSponsor", model);
}
El método getRandomSponsor funciona bien, este siempre devuelve un valor de cadena aleatorio que se devuelve a la vista RandomSponsor.cshtml.
RandomSponsor.schtml (solo contiene la cadena de la imagen)
<img src="~/Content/Images/Advert/@(Model)" alt="a" />
Busqué en la web este problema pero no encontré una solución, ¿alguien sabe la respuesta a esta? ¿Podría ser algo con HttpGet of HttpPost?
Saludos.
¿Le Html.RenderAction
una oportunidad con Html.RenderAction
? Por lo general, es más rápido que Html.Action
ya que interactúa directamente en la secuencia de respuesta en lugar de crear una cadena.
Puedes ver los siguientes temas para más información:
- ¿Cuál es la diferencia (si existe) entre Html.Partial (ver, modelo) y Html.RenderPartial (ver, modelo) en MVC2?
- Html.Partial vs Html.RenderPartial & Html.Action contra Html.RenderAction
Otra cosa a tener en cuenta es que para Html.Action
o Html.RenderAction
, su vista no necesita estar en la carpeta Compartida , solo se requiere si usa Html.Partial
o Html.RenderPartial
En mi caso, el mismo problema estaba sucediendo al azar con el implícito
usando (Html.BeginForm ())
Cambiando arriba a
usando (Html.BeginForm ("Acción", "Controlador", FormMethod.Post))
solucionó este problema
Esto también puede suceder si tiene muchas capas de llamadas que comienzan con una POST (tuve una acción que devuelve una vista que devuelve una vista parcial que llama RenderAction), entonces la llamada a RenderAction seguirá buscando un método POST
Muy similar a este problema que tuve aquí: cómo resolver "el método de acción pública ''methodActionName'' no se encontró en el controlador ''controllerNameController''"
Y si desea continuar aceptando el verbo HTTP GET y solucionar el problema de la solicitud de publicación en cascada en una solicitud de obtención, agregue esto a su método
[AcceptVerbs (HttpVerbs.Get | HttpVerbs.Post)]
Tenga en cuenta que [HttpGet] es el mismo que [AcceptVerbs (HttpVerbs.Get)]
Recibió este error de repente en varias vistas parciales (no todas) al personalizar una instalación de MVCForum. No habíamos hecho ningún cambio en los métodos o puntos de vista con respecto a los errores, por lo que fue realmente frustrante por qué se rompieron.
Después de probar las otras soluciones en esta publicación y en otras, repasé los cambios realizados y lo que terminó al detener los errores fue que habíamos cambiado los enlaces en IIS a otro dominio que tenía habilitada la regla de reescritura de URL ''forzar minúscula url''.
Cuando desactivábamos la aplicación de la regla en minúscula, los errores se detenían y el sitio funcionaba como se suponía. No es un problema de reescritura de URL (no creo) porque podemos hacer que www lo use sin errores. Es un problema de reescritura en minúsculas. No importaba si teníamos la regla minúscula antes o después de la regla www.
Esta solución probablemente no se aplique a muchos casos de este error, pero funcionó para nosotros. Con suerte, alguien más puede beneficiarse de una solución tan simple.
Si la solicitud de ejecución es un POST
, intentará encontrar un método RandomSponsor
acepte HttpPost
. Si tiene sentido, puedes eliminar HttpGet
y eso debería funcionar.
Esto también puede suceder si tiene muchas capas de llamadas que comienzan con una POST (Tuve una acción que devuelve una vista, devuelve una vista parcial llamando a RenderAction
), entonces la llamada a RenderAction
seguirá buscando un método POST