【问题标题】:Setting value for javascript variable from code behind (C#)从后面的代码中设置 javascript 变量的值 (C#)
【发布时间】:2013-05-10 03:18:33
【问题描述】:

我了解客户端脚本和服务器端脚本之间的区别。我的MasterPage 中有一个 javascript 函数和变量:

<script language="JavaScript" type="text/javascript">
    var needToConfirm = false;
          window.onbeforeunload = confirmExit;
          function confirmExit()
          {
            if (needToConfirm)
            {
              needToConfirm = false;
              return "Currently in edit mode. If you leave the page now then you will lose unsaved changes."
            }
          }
</script>

鉴于在我的 ASP.NET(客户端)上我可以将我的 needToConfirm 变量的值更改为 true onClientClick 但默认情况下它是 false。这是一个例子。

 <asp:Button ID="btnEdit" runat="server" Text="  Edit  " onclick="btnEdit_Click" OnClientClick="needToConfirm = true;" />

现在的问题是,在 C#(服务器端)上,我必须在 if-statement 下将 needToConfirm 设置为 true,但不一定在 Page_Load 上设置:

private void SetDefault()

    if (Session[def.ID_CUST] != null)
    {
          //I want to change the variable value here
    }
}

谢谢。

更新

我正在使用 .NET 2.0 Classic 和 WebForms

【问题讨论】:

  • 从服务器端直接调用脚本是不可能的。但是您可以使用 ClientScript.RegisterStartup() 脚本。

标签: c# javascript asp.net


【解决方案1】:

在后面的代码中:

ScriptManager.RegisterStartupScript(this, this.GetType(), "", "urFunction('urValHere');", true);

在客户端:

function urFunction(urParam) {
        //do what u want here
        //use urParam
    }

【讨论】:

    【解决方案2】:

    您可以使用隐藏输入,然后从服务器端将此输入设置为truefalse

    在客户端:

    <input type="hidden" id="hdnConfirm" runat="server" value="false"/>
    

    然后在服务器端:

     if (Session[def.ID_CUST] != null)
        {
              //I want to change the variable value here
               hdnConfirm.Value = "true";
        }
    

    然后在客户端:

    var needToConfirm = $('#hdnConfirm').val();
    

    【讨论】:

    • 你能详细说明一下吗。还是放一些细节(代码示例)?
    • var needToConfirm = false;用这个。 var needToConfirm = $('#hdnValue').val();只需在代码隐藏中设置 hdnValue 的值
    【解决方案3】:

    如果我理解正确,您可以像 http://msdn.microsoft.com/en-us/library/z9h4dk8y.aspx 的示例中那样注册客户端脚本。

    ClientScriptManager cs = Page.ClientScript;
    if (!cs.IsStartupScriptRegistered(this.GetType(), "EditMode")) {
        cs.RegisterStartupScript(this.GetType(), "EditMode", "needToConfirm = true;", true);
    }
    

    这将在页面中写入一个脚本,在 Javascript 中设置 needToConfirm 的值。

    【讨论】:

    • 它适用于Page_Load,但是在 C# 中的单独方法中如何?
    • 应该在任何继承System.Web.UI.Page的方法中工作。按钮点击、回发等。
    • 是的,但我实际上不需要触发按钮点击和回发的变量更改。不过还是谢谢。
    • 对,我只是将那些作为可以使用的方法使用。您可以在类中的任何方法中使用它们。
    【解决方案4】:

    根据您的更新说它是 .NET 2.0,您可以通过以下方式设置 javascript 变量:

    Page.RegisterStartupScript("SetVar", "var needToConfirm = true;");
    

    http://msdn.microsoft.com/en-us/library/system.web.ui.page.registerstartupscript(v=vs.80).aspx

    【讨论】:

      【解决方案5】:

      仅供参考。这是执行此类操作的 4.5 方法:

       // Define the name and type of the client scripts on the page.
       const String csname1 = "MyScriptName";
       Type cstype = this.GetType();
      
       // Get a ClientScriptManager reference from the Page class.
       ClientScriptManager cs = Page.ClientScript;
      
       // Check to see if the startup script is already registered.
       if (!cs.IsStartupScriptRegistered(cstype, csname1))
       {
            StringBuilder cstext1 = new StringBuilder();
            cstext1.Append("<script> var myVariable = true; </");
            cstext1.Append("script>");
      
            cs.RegisterStartupScript(cstype, csname1, cstext1.ToString());
        }
      

      http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.registerstartupscript(v=vs.110).aspx

      【讨论】:

        【解决方案6】:

        这可能有帮助吗?

        <script type="text/javascript">
            function test(confirm){
                var needToConfirm = confirm;
                window.onbeforeunload = confirmExit;
                function confirmExit() {
                    if (needToConfirm) {
                        needToConfirm = false;
                        return "Currently in edit mode. If you leave the page now then you will lose unsaved changes."
                    }
                }
            }
        </script>
        
        
        
        <asp:Button ID="btnEdit" runat="server" Text="Edit" onclick="btnEdit_Click" OnClientClick="javascript:test(true);" />
        

        【讨论】:

          猜你喜欢
          • 2012-07-30
          • 2021-01-29
          • 1970-01-01
          • 2011-09-05
          • 1970-01-01
          • 2018-07-17
          • 2012-03-30
          • 2016-07-06
          • 2011-02-12
          相关资源
          最近更新 更多