我有一个带按钮的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也在执行。我在这里做错了什么
答案 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;
}
}
});