【问题标题】:C# property value doesn't get modified within Javascript/ jqueryC# 属性值不会在 Javascript/jquery 中被修改
【发布时间】:2015-09-28 19:49:57
【问题描述】:

我在控制器的构造函数中初始化了一个属性。

public BookController()
{
  SessionProvider.SessionLoadSceanrio = false;
}

我有一个操作方法,它在按钮单击事件上再次重置属性。

public ActionResult LoadScenario(int bookId)
{
  SessionProvider.SessionLoadSceanrio = true;
  // remaining code
  return Json(ScenarioId, JsonRequestBehavior.AllowGet);
}

在我看来,单击按钮时会调用以下 javascript 代码。

var BookHandler = {
  $("#btnLoadScen").click(function (e) {
                $.ajax({
                    url: "@Url.Action("LoadScenario", "Book")",
                        dataType: 'json',
                        type: 'POST',
                        data: {
                            'bookId': BookHandler.getBookId()
                        },
                        success: function (response) {
                            var scenarioId = response;
                            var isLoadScenario = "@Portal.Presentation.Web.Planning.MVC.App_Start.SessionProvider.SessionLoadSceanrio";
                            //otherproperties
                            window.open("@Url.Action("Index", "BookScenario", new {loadScenario = "_loadScenario"}).replace('_loadScenario', isLoadScenario), tabId);

                        },
                        error: function () {
                        }
                    });

                });
}

我的问题是当我单击按钮时,控制器中的属性值发生了变化。但它在我的 javascript 代码中没有改变。请查看开发者工具的屏幕截图。


有人知道吗?

【问题讨论】:

  • 我看到控制台中有一个错误。它说什么?
  • 您粘贴的代码与截图不同。你确定你在运行它时引用的是相同的代码吗?
  • thushar .. 这是 css 错误.. 我们可以忽略它..
  • Mike 相同的代码。开发者工具显示价值。这就是我认为它看起来不同的地方。我没有在这里列出一些属性以增加可读性。但它实际上存在于代码中
  • 正在重新加载页面。我这样做了。但结果相同。

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


【解决方案1】:

只有在您从服务器获取视图后才会评估以下代码,并且不会在您的 ajax 调用后重新评估。

var isLoadScenario = "@Portal.Presentation.Web.Planning.MVC.App_Start.SessionProvider.SessionLoadSceanrio";

为了按照您的意愿行事,您需要在响应中返回 SessionLoadSceanrio。

你可以这样做:

    public ActionResult LoadScenario(int bookId)
    {
      SessionProvider.SessionLoadSceanrio = true;
      // remaining code
      return Json(new {ScenarioId, SessionLoadSceanrio = SessionProvider.SessionLoadSceanrio}, JsonRequestBehavior.AllowGet);
    }

【讨论】:

    【解决方案2】:

    您正在使用剃刀语法。然后最初加载页面,设置值,这些值是字符串,不再是变量。那么您将无法再次更新会话值。

    请从 AJAX 调用中获取会话值并设置为您的变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多