ASP.NET MVC - Returning a PartialView to Ajax along with another object

后端 未结 2 561
不思量自难忘°
不思量自难忘° 2020-11-30 18:47

I am writing a single page ajax app with ASP.NET MVC - making heavy use of jQuery. I do something similar to the following throughout the app:

JS:

$         


        
相关标签:
2条回答
  • 2020-11-30 18:57

    one way to skip having to return a json with multiple parameters and your html encoded as json is to send an HTML always but you send a hidden field that has the status set in it or something like that..

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

    I wouldnt recommend this appraoch I would have two partial views one for the normal view and the other for the error/unauthorized case..

    0 讨论(0)
  • 2020-11-30 19:04

    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); }
    });
    
    0 讨论(0)
提交回复
热议问题