asp.net mvc 3 - from - MVC3 redirigir a la acción después de la llamada ajax
asp net mvc ajax (3)
En acción puedes escribir esto:
if(Request.IsAjaxRequest()) {
return JavaScript("document.location.replace(''"+Url.Action("Action", new { ... })+"'');"); // (url should be encoded...)
} else {
return RedirectToAction("Action", new { ... });
}
En una aplicación ASP.NET MVC3 tengo un botón en la vista.
Cuando se hace clic en el botón, se llama a una función y se realiza una llamada jquery ajax para guardar elementos en la base de datos
function SaveMenuItems() {
var encodeditems = $.toJSON(ids);;
$.ajax({
type: ''POST'',
url: ''@Url.Action("SaveItems", "Store")'',
data: ''items='' + encodeditems + ''&[email protected]'',
complete: function () {
}
}
});
}
Lo que quiero es después de guardar los elementos en la base de datos que quiero redirigir a otra vista. (Redirigir a la acción)
¿Cómo puedo hacer eso?
Intenté usar el return RedirectToAction("Stores","Store")
en el controlador al final de la función SaveItems
. Pero no está funcionando
También intenté agregar window.location.replace("/Store/Stores");
en la función completa de la llamada ajax pero tampoco funcionó
Cualquier ayuda es muy apreciada
Muchas gracias
Puedes usar javascript para redirigir a la nueva página. Establezca el valor de window.location.href
en la nueva url en el evento success
/ complete
su llamada ajax.
var saveUrl = ''@Url.Action("SaveItems","Store")'';
var newUrl= ''@Url.Action("Stores","Store")'';
$.ajax({
type: ''POST'',
url: saveUrl,
// Some params omitted
success: function(res) {
window.location.href = newUrl;
},
error: function() {
alert(''The worst error happened!'');
}
});
O en el evento done
$.ajax({
url: someVariableWhichStoresTheValidUrl
}).done(function (r) {
window.location.href = ''@Url.Action("Stores","Store")'';
});
El código anterior utiliza el método de ayuda Url.Action
para crear la url relativa correcta al método de acción. Si su código javascript está dentro de un archivo javascript externo, debe crear la url a la raíz de la aplicación y pasarla a su script / código dentro de los archivos js externos y usarla para compilar la url a los métodos de acción como se explica en esta publicación .
¿Pasando parámetros?
Si desea pasar algunos parámetros de la cadena de consulta a la nueva url, puede usar esta sobrecarga del método Url.Action
que también acepta valores de ruta para construir la url con la cadena de consulta.
var newUrl = ''@Url.Action("Stores","Store", new { productId=2, categoryId=5 })'';
donde 2 y 5 pueden ser reemplazados por algunos otros valores reales.
Dado que este es un método auxiliar de html, funcionará solo en su vista de afeitar, no en archivos js externos. Si su código está dentro del archivo js externo, debe crear manualmente los parámetros de la cadena de consulta de url.
Generando la nueva url en el lado del servidor
Siempre es una buena idea utilizar los métodos de ayuda de mvc para generar las URL correctas para el método de acción. Desde su método de acción, puede devolver una estructura json que tiene una propiedad para redirigir la nueva URL.
Puede usar la clase UrlHelper
dentro de un controlador para hacer esto.
[HttpPost]
public ActionResult Step8(CreateUser model)
{
//to do : Save
var urlBuilder = new UrlHelper(Request.RequestContext);
var url = urlBuilder.Action("Stores", "Store");
return Json(new { status = "success", redirectUrl = url });
}
Ahora, en la devolución de llamada success
/ done
su llamada ajax, simplemente verifique el valor de retorno y redirija según sea necesario.
.done(function(result){
if(result.status==="success")
{
window.location.href=result.redirectUrl;
}
else
{
// show the error message to user
}
});
Tratar
window.location = "/Store/Stores";
En lugar.