Problema con form en partialView
-
quarta-feira, 7 de março de 2012 13:23
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
Todas as Respostas
-
quarta-feira, 7 de março de 2012 13:56
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" -
quarta-feira, 7 de março de 2012 15:11
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
-
quarta-feira, 7 de março de 2012 15:23Debugueando veo que en realidad primero va al método ResolverBusqueda, pero despues parsea el layput de la vista de resultados y cuando carga la encuesta, es ahí donde va al httpPost de la encuesta.
-
quarta-feira, 7 de março de 2012 15:46
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 Resposta sepilrat quinta-feira, 8 de março de 2012 13:39
-
quinta-feira, 8 de março de 2012 13:39
Gracias por la respuesta.
De esa manera lo tengo, la solución que encontré es darle un nombre diferente al metodo que rcibe el post.
GRacias por tu tiempo.
Saludos

