javascript ASP .NETMVC-将PartialView与另一个对象沿着返回到 AJAX

tp5buhyn  于 2022-12-25  发布在  Java
关注(0)|答案(2)|浏览(123)

我正在用ASP.NET MVC编写一个单页ajax应用程序-大量使用jQuery。我在整个应用程序中做了类似以下的事情:
联森:

$.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; }
}

联森:

$.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本身将返回的相同字符串。
(As我在开始时提到,这是一个单页应用程序-所以我不能只是重定向到另一个视图)。

ztigrdn8

ztigrdn81#

所以-使用以下职位,我得到了这个工作:
Partial Views vs. Json (or both)
Render a view as a string
它们都很好地进行了布局,然后我将代码更改为以下代码:
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; }
}

联森:

$.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); }
});
zdwk9cvp

zdwk9cvp2#

一种避免返回带有多个参数的json和编码为json的html的方法是总是发送一个HTML,但是发送一个隐藏字段,其中设置了状态或类似的内容。

success: function(data)
{
  if(data.find("#ajax-status").val()==="success")
  {
    $("#someDiv").html(data);
  }
  else
  {
    showPopup("You do not have access to that.");
  }
}

我不会推荐这种方法,我会有两个部分视图,一个是正常视图,另一个是错误/未经授权的情况。

相关问题