Principales respuestas
Problema con form en partialView

Pregunta
-
Hola.
En mi aplicación tengo un layout que tiene un llamado a un método que muestra un partialView que es formulario para votar una encuesta.
Funciona bien, pero cuando el layout se carga en una página que es contiene un form ej una pagina "Create" cuando hago click en el submit de la encuesta, en lugar de ir al metodo de la encuesta, va al metodo del create.
alguna idea?
gracias desde ya
Respuestas
-
Creo que el problema está en el tipo de método que usas.
Te posteo el código que tengo de un ejemplo
Controlador
public RedirectToRouteResult AddToCart(int Id, string returnUrl) { Product product = repository.Products.FirstOrDefault(p => p.Id == Id); if (product != null) GetCart().AddItem(product, 1); return RedirectToAction("Index", new { returnUrl }); }
Vista parcial
@model SportsStore.Domain.Entities.Product <div class="divProductListItem"> <div class="divCartButton"> @using(Html.BeginForm("AddToCart", "Cart")) { @Html.HiddenFor(p => p.Id) @Html.Hidden("returnUrl", Request.Url.PathAndQuery) <input type="submit" value="Add to cart" /> } </div> <div class="divProductData"> <h2>@Model.Name</h3> @Model.Description <h3>@Model.Price.ToString("c")</h4> </div> </div>
"En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"- Marcado como respuesta sepilrat jueves, 8 de marzo de 2012 13:39
Todas las respuestas
-
Hola sepilrat.
¿En la declaración del formulario le estás especificando la acción que debe ejecutar?
using (Html.BeginForm( (string)ViewData["PostBackAction"], "Candidate", ..
"En los momentos de crisis, sólo la imaginación es más importante que el conocimiento" -
gracias por la respuesta.
Este es mi partialView:
@model Lumitech.Models.Buscador @using (Html.BeginForm("ResolverBusqueda","Buscador")) { @Html.ValidationSummary(true) <fieldset> <legend>Buscador</legend> <div class="editor-label"> @Html.LabelFor(model => model.TerminoBusqueda, Resources.Lenguajes.SearchText) </div> <div class="editor-field"> @Html.EditorFor(model => model.TerminoBusqueda) @Html.ValidationMessageFor(model => model.TerminoBusqueda) </div> <p> <input type="submit" value="Buscar" /> </p> </fieldset> }
El controlador
public PartialViewResult Buscar() { return PartialView(); } [HttpPost] public ActionResult ResolverBusqueda(Buscador buscador) { var productos = from p in db.Productos where p.Nombre.Contains(buscador.TerminoBusqueda) ||p.DescripcionEspaniol.Contains(buscador.TerminoBusqueda) ||p.DescripcionIngles.Contains(buscador.TerminoBusqueda) select p; if(buscador.DisponibleStock) { productos = from p in productos where p.Stock > 0 select p; } Double PrecioDesde; if(double.TryParse(buscador.PrecioDesde.ToString(), out PrecioDesde)) { productos = from p in productos where p.PrecioUnitario > buscador.PrecioDesde select p; } Double PrecioHasta; if (double.TryParse(buscador.PrecioDesde.ToString(), out PrecioHasta)) { productos = from p in productos where p.PrecioUnitario < buscador.PrecioHasta select p; } return View(productos); } }
una porción del layout don de llamo a la partialView que carga los formularios
<div id="sidebar"> <ul> <li> <h2>Buscador</h2> @{Html.RenderAction("Buscar", "Buscador");} </li> <li> </ul> @{Html.RenderAction("ClienteLogged","Cliente");} <ul> <li> <div style="clear: both;"> </div> </li> <li> < </li> <li> <h2>Encuestas</h2> @{Html.RenderAction("VotarEncuesta", "Encuesta");} </li> <li>
cuando presiono buscar, va al método Votar encuesta del encuestaControlle en lugar de ir al resolverBusqueda del buscadorController
-
-
Creo que el problema está en el tipo de método que usas.
Te posteo el código que tengo de un ejemplo
Controlador
public RedirectToRouteResult AddToCart(int Id, string returnUrl) { Product product = repository.Products.FirstOrDefault(p => p.Id == Id); if (product != null) GetCart().AddItem(product, 1); return RedirectToAction("Index", new { returnUrl }); }
Vista parcial
@model SportsStore.Domain.Entities.Product <div class="divProductListItem"> <div class="divCartButton"> @using(Html.BeginForm("AddToCart", "Cart")) { @Html.HiddenFor(p => p.Id) @Html.Hidden("returnUrl", Request.Url.PathAndQuery) <input type="submit" value="Add to cart" /> } </div> <div class="divProductData"> <h2>@Model.Name</h3> @Model.Description <h3>@Model.Price.ToString("c")</h4> </div> </div>
"En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"- Marcado como respuesta sepilrat jueves, 8 de marzo de 2012 13:39
-