asp.net-mvcc#-4.0reportviewer2008

Open .aspx page with report controller in MVC


I have an MVC .cshtml page with a button. It's in a grid and I am passing the row ids to the controller using the jquery

<button type="submit" id="btn_View" name="view"
      class="btn_View">

 $(".btn_View_Question").click(function () { 

            var json = [];
            var obj = {};

            var rowID = $(this).closest('tr').attr('id');
            obj.RowId= rowID ;


            console.log(obj);
            json.push(obj)
            var responseDetails = JSON.stringify(json);
            $.ajax({
                url: "/Home/View",
                type: "POST",
                data: responseDetails,
                dataType: "json",
                traditional: true,
                contentType: "application/json; charset=utf-8",
            });

        });

In the controller class I am redirecting to a aspx report page as follows

public RedirectResult ViewQuestionnaire(string[] id)
    {
  var reportParameters = new Dictionary<string, string>();
 reportParameters.Add("ID", id[0]);
 Session["reportParameters"] = reportParameters;
return Redirect("../Reports/ViewQuestionarie.aspx");
}

The aspx page is not loading. When I debug it the page_load of the aspx page also executing. What might the wrong thing I am doing here


Solution

  • Redirect is going to return a 302 response with the new url as the location header value.You should not be making the call to an action method which returns a 302 response from an ajax call.

    Looks like you want to set some data to Session. You may use your ajax call to still do that part. Instead of returning a 302 response,return a json data structure with the url you want the browser to be redirected.

    public ActionResult ViewQuestionnaire(string[] id)
    {
        var reportParameters = new Dictionary<string, string>();
        reportParameters.Add("ID", id[0]);
        Session["reportParameters"] = reportParameters;
        return Json(new {status = "success", url="../Reports/ViewQuestionarie.aspx"});      
    }
    

    And in the success / done event of the ajax call, you can read the url property of the json response coming back and use that to do the redirection.

    $.ajax({
    
        //Omitted some parameters 
    
        success: function(res) {
            if (res.status === "success") {
                window.location.href = res.url;
            }
        }
    });