ASP.NET MVC - 将 PartView 与另一个对象一起返回给 Ajax
ASP.NET MVC - Returning a PartialView to Ajax along with another object
我正在编写一个带有 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
函数中(以字符串形式返回,我可以毫无问题地将其推到页面上。
现在我想做的是不仅返回 PartView HTML 字符串,还返回某种状态指示器。 这是一个权限问题 - 例如,如果有人试图访问他们没有权限的应用程序的一部分,我想返回与他们要求的不同 PartView,并在弹出窗口中显示一条消息,告诉他们为什么他们得到的视图与他们要求的视图不同。
所以 - 为此,我想执行以下操作:
控制器 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
就会返回的相同字符串。
(正如我在开头提到的,这是一个单页应用程序 - 所以我不能将它们重定向到另一个视图(。
所以 - 使用以下帖子,我得到了这个工作:
部分视图与 Json(或两者兼而有之(
将视图呈现为字符串
他们都很好地布置了它,然后我将代码更改为以下内容:
C#:
public ActionResult GetSomePartialView(SomeArgumentModel someArguments)
{
ReturnArgs r = new ReturnArgs();
bool isAllowed = CheckPermissions();
if (isAllowed)
{
r.Status = 400; //good status ... proceed normally
r.ViewString = this.RenderViewToString("_CaseManager");
}
else
{
r.Status = 300; //not good ... display permissions pop up
r.ViewString = this.RenderViewToString("_DefaultView");
}
return Json(r);
}
public class ReturnArgs
{
public ReturnArgs()
{
}
public int Status { get; set; }
public string ViewString { 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.ViewString); //the HTML I returned from the controller
},
error: function (errorData) { onError(errorData); }
});
返回具有多个参数的 JSON 并且您的 HTML 编码为 json 的一种方法是始终发送 HTML,但您发送一个隐藏字段,其中设置了状态或类似的东西。
success: function(data)
{
if(data.find("#ajax-status").val()==="success")
{
$("#someDiv").html(data);
}
else
{
showPopup("You do not have access to that.");
}
}
我不推荐这个appraoch,我会有两个部分视图,一个用于普通视图,另一个用于错误/未经授权的情况。
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 你能用来自数组的属性名称生成一个对象吗
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Protractor:element.getText()返回一个对象,而不是String
- 如何使用jQuery添加另一个对象的高度作为边距
- 计算从一个对象到另一个对象的路径并沿其移动
- 如何将一个对象添加到每个对象数组中
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 将javascript对象(属性+值)合并到一个对象中
- 尝试简化检查对象键是否为true并将其推送到另一个对象
- 从 javascript 中的对象方法返回一个对象
- 响应应包含一个对象,但得到的却是GET操作的数组
- js:如何制作一个循环,将20个不同的东西添加到一个对象中
- ASP.NET MVC - 将 PartView 与另一个对象一起返回给 Ajax