net mvc from asp asp.net-mvc-3 jquery redirect

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.