Estoy escribiendo una aplicación de una página ajax con ASP.NET MVC, haciendo un uso intensivo de jQuery. Hago algo similar al siguiente a lo largo de la aplicación:ASP.NET MVC - Devolviendo un PartialView a Ajax junto con otro objeto
JS:
$.ajax({
type: "GET",
url: "/Home/GetSomePartialView/",
data: someArguments,
success: function (viewHTML) {
$("#someDiv").html(viewHTML);
},
error: function (errorData) { onError(errorData); }
});
controlador C#:
public ActionResult GetSomePartialView(SomeArgumentModel someArguments)
{
return PartialView("_CaseManager");
}
Esto funciona muy bien. El viewHTML
(en la función ajax success
) se devuelve como una cadena y puedo empujarlo en la página sin problema.
Ahora, lo que me gustaría hacer es devolver no solo la cadena HTML PartialView, sino también algún tipo de indicador de estado. Esto es una cuestión de permisos; por ejemplo, si alguien intenta acceder a una parte de la aplicación a la que no tiene permiso, quiero devolver un PartialView diferente del que pidieron y también mostrar un mensaje en una ventana emergente indicándoles por qué obtuvieron una Vista diferente de la que pidieron.
Por lo tanto - para hacer esto, me gustaría hacer lo siguiente:
controlador C#:
public ActionResult GetSomePartialView(SomeArgumentModel someArguments)
{
ReturnArgs r = new ReturnArgs();
bool isAllowed = CheckPermissions();
if (isAllowed)
{
r.Status = 400; //good status ... proceed normally
r.View = PartialView("_CaseManager");
}
else
{
r.Status = 300; //not good ... display permissions pop up
r.View = PartialView("_DefaultView");
}
return Json(r);
}
public class ReturnArgs
{
public ReturnArgs()
{
}
public int Status { get; set; }
public PartialViewResult View { get; set; }
}
JS:
$.ajax({
type: "GET",
url: "/Home/GetSomePartialView/",
data: someArguments,
success: function (jsReturnArgs) {
if (jsReturnArgs.Status === 300) { //300 is an arbitrary value I just made up right now
showPopup("You do not have access to that.");
}
$("#someDiv").html(jsReturnArgs.View); //the HTML I returned from the controller
},
error: function (errorData) { onError(errorData); }
});
Este SORTA funciona en este momento. Obtengo un buen objeto en JavaScript (lo que espero ver), sin embargo, no puedo ver cómo obtener la cadena HTML completa de la propiedad jsReturnArgs.View
.
Realmente estoy buscando la misma cadena que sería devuelta si solo devolviera el PartialView
por sí mismo.
(Como mencioné al principio, esta es una aplicación de una sola página, así que no puedo simplemente redirigirlas a otra Vista).
¡Gracias de antemano por cualquier ayuda!
¡Agradezco la entrada! Estaba intentando evitar algo así si pudiera. – MattW