【问题标题】:Optimal Way to Pass C# Variables to JS将 C# 变量传递给 JS 的最佳方式
【发布时间】:2009-07-10 14:51:04
【问题描述】:

我有几个用 JS 编写的函数,可以在我的网站上进行错误检查。在一个实例上,如果数据库中的某个实例为真,我想禁用其中两项检查。

我在 aspx.cs 上有类似的东西

if (this.exemptcheck == true) {
  // could set a variable to pass or whatever is optimal here
}

然后在 JS 中,我的 .aspx 中有这样的函数

if (NotANumberCheck(item.GetMember("TotalSpace").Value, 'Space must be Numeric') == false) { return false; }

如果 this.examptcheck 返回 true,我不希望运行此检查。执行此操作的最佳方法是什么?我听说将变量放在不可见的字段中,但这似乎并不理想。任何建议将不胜感激。

谢谢

【问题讨论】:

  • 旁注:通常不鼓励明确检查布尔值是否等于真或假。布尔值已经是布尔值。至少在 C# 和 JS 中,这应该不是问题。

标签: c# javascript


【解决方案1】:

在aspx中,设置一个名为ExemptCheck的成员变量。稍后,在 JS 中,这样做:

var exemptCheck = <% Response.Write(ExemptCheck.ToString()) %>;

这将为您提供一个与 C# 变量具有相同值的 JS 变量。

【讨论】:

  • 我在我的 aspx.cs 中有这个 private void pageSetup(EventArgs args) { Boolean excludeCheck; if (dss.ExemptCheck == true) { excludeCheck = true;我将以下内容放在我的 JS 函数 onInsert(item) { var excludeCheck = ;这给了我以下错误 Compiler Error Message: CS0103: The name 'exemptCheck' does not exist in the current context 这是范围问题还是我做错了什么?
  • 这是一个范围问题。 excludeCheck 需要是整个页面对象的成员变量,而不仅仅是 pageSetup 函数; 之间的代码在页面渲染功能期间执行,在您的 pageSetup 功能退出很久之后。
【解决方案2】:

仅当您的条件为真时才注册您的js函数,您不需要检查变量:

C#代码:

if (this.exemptcheck == true) {
    Page.ClientScript.RegisterStartupScript(Page.GetType(), "KEY", "/* code of your JS function that handle the true case */", true);
}

【讨论】:

    【解决方案3】:

    您可以在页面中编写一个脚本部分,将变量设置为 true/false,然后稍后在 JS 中检查该变量。

    【讨论】:

      【解决方案4】:

      只有当 this.examptcheck 为真时,您才可以 Response.Write() javascript 代码。

      【讨论】:

        【解决方案5】:

        我最终使用以下命令在 aspx.cs 代码中设置值

        Page.ClientScript.RegisterStartupScript(this.GetType(), "", "var packedUnknownExemptCheck = true;", true);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-08
          • 1970-01-01
          • 2016-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-14
          • 1970-01-01
          相关资源
          最近更新 更多