我在Controller的构造函数中初始化一个属性。
public MyController()
{
SessionProvider.IntializeMethod = false;
}
我有一个Action方法,可以在按钮点击事件中重新设置属性。
public ActionResult Initialize(int Id)
{
SessionProvider.IntializeMethod = true;
// remaining code
return Json(Id, JsonRequestBehavior.AllowGet);
}
以下javascript代码位于我的视图中,单击该按钮时会调用该代码。
var MyHandler = {
$("#btnInit").click(function (e) {
$.ajax({
url: "@Url.Action("Initialize", "My")",
dataType: 'json',
type: 'POST',
data: {
'Id': MyHandler.getItemId()
},
success: function (response) {
var Id = response;
var isInitilize = "@MyProject.Presentation.MVC.App_Start.SessionProvider.IntializeMethod ";
// code
window.open("@Url.Action("Index", "OtherPage", new {Initialize = "_initialize"}).replace('_initialize', isInitilize ), tabId);
},
error: function () {
//
}
});
});
}
我的问题是当我单击按钮时,Controller中的属性值发生了变化。但它在我的javascript代码中没有变化。请参阅开发人员工具的屏幕截图。
有没有人对此有所了解?
答案 0 :(得分:0)
它不应该改变。因为它已在加载View时写入..
var isInitilize = "@MyProject.Presentation.MVC.App_Start.SessionProvider.IntializeMethod ";
这将在渲染视图时声明,并且不会被更改。如果您想要从操作中获取更新的值,那么您应该将其作为JSON返回(因为您正在使用 jquery ajax 调用 Controller的行动)。
根据您的解释,您应该使用以下内容:
public ActionResult Initialize(int Id)
{
SessionProvider.IntializeMethod = true;
// remaining code
return Json(new { Id = 1, Name = "Sachin" }, JsonRequestBehavior.AllowGet); ////I changed here ////
//return Json(Id, JsonRequestBehavior.AllowGet);
}
然而你可以在javascript中得到它:
var MyHandler = {
$("#btnInit").click(function (e) {
$.ajax({
url: "@Url.Action("Initialize", "My")",
dataType: 'json',
type: 'POST',
data: {
'Id': MyHandler.getItemId()
},
success: function (response) {
var Id = response.Id; ////I changed here ////
var isInitilize = response.Name; ////I changed here ////
// code
window.open("@Url.Action("Index", "OtherPage", new {Initialize = "_initialize"}).replace('_initialize', isInitilize ), tabId);
},
error: function () {
//
}
});
});
}
如果我是你,那么我应该返回像
一样的行动网址
return Json(new { Id = 1, URL = "/controller/action/param" })
。