页面加载后,Javascript变量值不会更改一次

时间:2015-10-16 05:43:31

标签: javascript c# jquery asp.net-mvc razor

我在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代码中没有变化。请参阅开发人员工具的屏幕截图。


有没有人对此有所了解?

1 个答案:

答案 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" })