8

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

<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#(服务器端)上时,我必须needToConfirm在 an 下设置为 true,if-statement但不一定在Page_Load

private void SetDefault()

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

谢谢。

更新

我正在使用 .NET 2.0 Classic 和 WebForms

4

6 回答 6

8

您可以使用隐藏输入,然后将此输入设置到服务器端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();
于 2013-05-10T03:21:55.973 回答
8

在后面的代码中:

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

在客户端:

function urFunction(urParam) {
        //do what u want here
        //use urParam
    }
于 2013-05-10T03:29:31.773 回答
2

如果我理解正确,您可以在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);
}

这将在页面中编写一个脚本来设置needToConfirmJavascript 中的值。

于 2013-05-10T03:27:24.797 回答
1

根据您说它是 .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

于 2013-05-10T03:31:25.510 回答
1

仅供参考。这是执行此类操作的 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

于 2014-03-11T18:07:40.250 回答
1

也许这有帮助?

<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);" />
于 2017-05-16T08:57:17.867 回答