ASP.NET MVC - 返回一个PartialView阿贾克斯与其他对象一起ASP.NET M

2019-05-14 02:10发布

我写一个单页的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); }
});

控制器C#:

public ActionResult GetSomePartialView(SomeArgumentModel someArguments)
{

    return PartialView("_CaseManager");
}

这个伟大的工程。 该viewHTML (在阿贾克斯success函数)返回一个字符串,我可以推它在页面上没有问题。

现在我想做的是回到不仅PartialView 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(什么,我期待看到)一个很好的对象,但我看不出如何在充分的HTML字符串得到jsReturnArgs.View财产。

我真的只是寻找能,如果我只是返回返回相同的字符串PartialView本身。

(正如我在开始提到的,这是一个单页的应用程序 - 这样我就可以不只是他们重定向到另一个视图)。

在此先感谢您的帮助!

Answer 1:

So - using the following posts I got this working:

Partial Views vs. Json (or both)

Render a view as a string

They both lay it out nicely, then I changed my code to the following:

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); }
});


Answer 2:

跳过不得不与多个参数和你的HTML编码为JSON返回一个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我有两个部分的景色之一为普通视图,另一个用于错误/未经授权的情况下..



文章来源: ASP.NET MVC - Returning a PartialView to Ajax along with another object