Я пишу одностраничное приложение ajax с помощью ASP.NET MVC, что значительно облегчает использование jQuery. В приложении все что-то похожее на следующее:
JS:
$.ajax({
type: "GET",
url: "/Home/GetSomePartialView/",
data: someArguments,
success: function (viewHTML) {
$("#someDiv").html(viewHTML);
},
error: function (errorData) { onError(errorData); }
});
Контроллер С#:
public ActionResult GetSomePartialView(SomeArgumentModel someArguments)
{
return PartialView("_CaseManager");
}
Это отлично работает. viewHTML
(в функции ajax success
) возвращается в виде строки, и я не могу записать его на страницу без проблем.
Теперь то, что я хотел бы сделать, это вернуть не только строку PartialView HTML, но и некоторый индикатор состояния. Это вопрос с разрешениями - например, если кто-то пытается получить часть своего приложения, у него нет разрешения, я хочу вернуть другой PartialView, чем они просили, а также отобразить сообщение во всплывающем окне, сообщающем им почему они получили представление, отличное от того, что они просили.
Итак - для этого я хотел бы сделать следующее:
Контроллер С#:
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); }
});
Этот SORTA работает прямо сейчас. Я получаю хороший объект в JavaScript (что я ожидаю увидеть), однако я не вижу, как получить полную строку HTML свойства jsReturnArgs.View
.
Я действительно ищу ту же строку, которая была бы возвращена, если бы я просто возвращал PartialView
сам.
(Как я уже упоминал в начале, это одностраничное приложение, поэтому я не могу просто перенаправить их на другой вид).
Заранее благодарим за помощь!