使用MVC中的报表控制器打开.aspx页面

时间:2016-01-25 16:48:38

标签: asp.net-mvc c#-4.0 reportviewer2008

我有一个带按钮的MVC .cshtml页面。它在网格中,我使用jquery

将行ID传递给控制器
<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",
            });

        });

在控制器类中,我将重定向到aspx报告页面,如下所示

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

aspx页面未加载。当我调试它时,aspx页面的page_load也在执行。我在这里做错了什么

1 个答案:

答案 0 :(得分:1)

重定向将返回302响应,并将新url作为位置标头值。您不应该调用从ajax调用返回302响应的action方法。

看起来您想要将一些数据设置为Session。您可以使用您的ajax调用仍然执行该部分。而不是返回302响应,返回一个json数据结构,其中包含您希望浏览器重定向的URL。

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

在ajax调用的success / done事件中,您可以读取返回的json响应的url属性,并使用它来执行重定向。

$.ajax({

    //Omitted some parameters 

    success: function(res) {
        if (res.status === "success") {
            window.location.href = res.url;
        }
    }
});