【发布时间】:2012-05-14 19:24:52
【问题描述】:
我正在使用 ASP.NET MVC 编写单页 ajax 应用程序 - 大量使用 jQuery。我在整个应用程序中执行类似于以下操作:
JS:
$.ajax({
type: "GET",
url: "/Home/GetSomePartialView/",
data: someArguments,
success: function (viewHTML) {
$("#someDiv").html(viewHTML);
},
error: function (errorData) { onError(errorData); }
});
控制器 C#:
public ActionResult GetSomePartialView(SomeArgumentModel someArguments)
{
return PartialView("_CaseManager");
}
这很好用。 viewHTML(在 ajax success 函数中)作为字符串返回,我可以将它推到页面上没问题。
现在我想做的不仅是返回 PartialView HTML 字符串,还要返回某种状态指示器。这是一个权限问题 - 例如,如果有人试图访问他们没有权限的应用程序的一部分,我想返回一个不同于他们要求的 PartialView 并在弹出窗口中显示一条消息告诉他们为什么他们得到的 View 与他们要求的不同。
所以 - 为此,我想做以下事情:
控制器 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); }
});
这个SORTA现在有效。我在 JavaScript 中得到了一个很好的对象(我期望看到的),但是我看不到如何获取 jsReturnArgs.View 属性的完整 HTML 字符串。
我真的只是在寻找如果我自己返回 PartialView 会返回的相同字符串。
(正如我在开头提到的,这是一个单页应用程序 - 所以我不能只是将它们重定向到另一个视图)。
提前感谢您的帮助!
【问题讨论】:
标签: javascript jquery asp.net-mvc-3