Sto scrivendo un'app ajax a pagina singola con ASP.NET MVC: utilizzo pesante di jQuery. Faccio qualcosa di simile al seguente in tutto l'app:ASP.NET MVC - Restituzione di PartialView a Ajax insieme a un altro oggetto
JS:
$.ajax({
type: "GET",
url: "/Home/GetSomePartialView/",
data: someArguments,
success: function (viewHTML) {
$("#someDiv").html(viewHTML);
},
error: function (errorData) { onError(errorData); }
});
controller C#:
public ActionResult GetSomePartialView(SomeArgumentModel someArguments)
{
return PartialView("_CaseManager");
}
Questa grande opera. Il viewHTML
(nella funzione ajax success
) viene restituito come una stringa e non posso inserirlo nella pagina senza problemi.
Ora quello che mi piacerebbe fare è restituire non solo la stringa HTML di PartialView, ma anche una sorta di indicatore di stato. Questa è una cosa dei permessi - per esempio, se qualcuno cerca di ottenere una porzione di app a cui non hanno il permesso, voglio restituire un PartialView diverso da quello che hanno richiesto e anche visualizzare un messaggio in una finestra popup che dice loro perché hanno una visione diversa da quella richiesta.
Così - per fare questo, vorrei fare quanto segue:
controller 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); }
});
Questo SORTA funziona in questo momento. Ottengo un buon oggetto in JavaScript (cosa mi aspetto di vedere), tuttavia non riesco a vedere come ottenere la stringa HTML completa della proprietà jsReturnArgs.View
.
In realtà sto solo cercando la stessa stringa che verrebbe restituita se solo restituissi lo PartialView
da solo.
(Come ho detto all'inizio, questa è un'applicazione a singola pagina, quindi non posso semplicemente reindirli a un'altra vista).
Grazie in anticipo per qualsiasi aiuto!
Apprezzo l'input! Stavo cercando di evitare una cosa del genere se potessi. – MattW