我正在用ASP.NET MVC編寫單頁ajax應用程序 - 大量使用jQuery。我做一些類似以下內容的整個應用程序:ASP.NET MVC - 將部分視圖與另一個對象一起返回到Ajax
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
函數中)作爲字符串返回,我可以將它推到頁面上沒有問題。
現在我想要做的是不僅返回部分視圖HTML字符串,而且還返回某種狀態指示器。這是一個權限問題 - 例如,如果有人試圖訪問他們沒有權限的應用程序的一部分,我想返回一個不同於他們要求的PartialView,並在彈出窗口中顯示一條消息,告訴他們爲什麼他們的視圖與他們所要求的不同。
所以 - 要做到這一點,我想做到以下幾點:
控制器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
就會返回。
(正如我在開始時提到的,這是一個單頁面應用程序 - 因此我不能將它們重定向到另一個視圖)。
在此先感謝您的幫助!
我很欣賞的投入!如果可以的話,我試圖避免這樣的事情。 – MattW