【问题标题】:assign value to javascript variable In C# CodeBehind在 C# CodeBehind 中为 javascript 变量赋值
【发布时间】:2010-09-07 04:25:52
【问题描述】:

如何从代码隐藏 (C#) 为 javasctipt 变量赋值?

<script type="text/javascript">
String.prototype.trim = function () { return this.replace(/^\s+|\s+$/, ''); };
function ConstantByCode(_Obj, _Div) {
    var pl = new SOAPClientParameters();
    _Obj.value = _Obj.value.trim();
    pl.add("Code", _Obj.value);
    pl.add("Group", _Obj.Grp);
    alert(_Obj.Grp);
    var _Value = SOAPClient.invoke("ConstantWS.asmx", "GetConstantByCode", pl, false, CallBackEvent);
    if (_Value == null || _Obj.value == "" || _Obj.value == null || IsNumeric(_Obj.value) == false) {
        _Obj.value = "";
        _Div.innerHTML = "";
    }
    else {
        _Div.innerHTML = _Value;
    }
}


function CallBackEvent(r) {

}
function IsNumeric(input) {
    return (input - 0) == input && input.length > 0;
}

隐藏代码

 txtCode.Attributes.Add("Grp", Me.ConstValue)
    txtCode.Attributes.Add("onchange", "ConstantByCode(this," & DivTitle.ClientID & ");")
    txtCode.Attributes.Add("onkeyup", "ConstantByCode(this," & DivTitle.ClientID & ");")

_obj.Grp 现在具有价值。 警报说:未定义

【问题讨论】:

  • 你遇到了什么错误?
  • 代替String.prototype.trim = function () { return this.replace(/^\s+|\s+$/, ''); };你可以使用这个:$.trim(value)
  • @Javad_Amiry 谢谢,但在那种情况下,我必须使用纯 JavaScript。

标签: c# javascript asp.net


【解决方案1】:

我看到您想要检索作为自定义属性的 Grp 的值。您需要使用 getAttribute 函数 - 所以您需要使用 _Obj.getAttribute("Grp") 而不是 _Obj.Grp

另外,我看到您没有在 ode-behind 的引号中包含客户 ID。所以不是

txtCode.Attributes.Add("onchange", "ConstantByCode(this," & DivTitle.ClientID & ");")

你需要说

txtCode.Attributes.Add("onchange", "ConstantByCode(this,'" & DivTitle.ClientID & "');")

请注意客户 ID 周围的单引号 (')。

此外,ConstantByCode js 函数似乎正在使用 div 元素。因此,您需要在其中添加一行以将客户端 ID 转换为实际 DOM。即

function ConstantByCode(_Obj, _Div) {
   _Div = document.getElementById(_Div);
   .... // rest of the code

【讨论】:

    【解决方案2】:

    首先,您需要访问客户端上的值。我们可以通过将值存储在隐藏字段中或向控件添加属性来做到这一点。看来您希望通过使用属性来做到这一点,所以让我们先这样做。

    将以下内容添加到您的 page_load 方法中,以便我们可以访问客户端上的 C# 值。

    protected void Page_Load(object sender, EventArgs e) { string requiredJSValue = "把你的值放在这里"; txtCode.Attributes.Add("CSCodeAttribute", requiredJSValue); }

    然后我们需要通过 Javascript 访问这个值。首先,我们需要获取控件的客户端 ID,因为 C# 将设置此值。笔记。我正在使用 Jquery 来检索控件 ID。这不是必需的,但我更喜欢它。 jquery是一个javascript框架,可以从www.jquery.com下载

    函数 GetCSAttributeValue() { var csControlID = $('#'); //获取控件名称。 var requiredJSValue = csControlID .attr("CSCodeAttribute"); //存储在变量中的值。 }

    【讨论】:

      【解决方案3】:

      我不能 100% 确定,但我认为您需要一种解决方法才能使其正常工作。因为在后端逻辑上 javascript 变量甚至不存在。您可能可以创建一个隐藏字段并使其成为 javascript 变量和背后代码之间的桥梁。检查这个:http://forums.devx.com/showthread.php?t=164356

      试试这个: 1.在你的.aspx页面中添加一个隐藏字段:

      <asp:HiddenField ID="hidden" runat="server" />
      

      2。在您的代码隐藏中更改此字段的值:

      protected void Page_Load(object sender, EventArgs e)
          {
              hidden.Value = "hello";
          }
      

      3。编写以下脚本来访问该值并将其放入任何变量中:

      <script type="text/javascript">
              if (document.getElementById("MainContent_hidden") != undefined) {
                  var hiddenVal = document.getElementById("MainContent_hidden").value;
              }
              else {
                  var hiddenVal = null;
              }
      </script>
      

      警告:第三部分很棘手。当我们调用 getElementById 函数时,我们没有使用我们在第一步中提供的相同 ID。这是因为 asp.net 对此进行了更改,临时解决方法是运行该页面一次并查看其源代码。检查隐藏字段的 id 并将其放在 getElementById 函数中的步骤 3 中。您可以寻找更好的替代品,但如果您愿意,现在可以使用它。如果您对第 3 步感到震惊,请告诉我。

      【讨论】:

      • Ypu 不应硬编码控件的 ClientId。请改用&lt;%=hidden.ClientID %&gt;...var hiddenVal = document.getElementById("&lt;%=hidden.ClientID %&gt;").value;
      • 试过这个但没有让它工作。 @shaahin 你可以试试@Carlos 的代码,如果这行得通,那就太棒了。
      【解决方案4】:

      我不明白您的问题与代码有何关系...
      但是要从服务器端设置一个 javascript 值的值......你不能,因为服务器端代码在服务器中精确地运行,并且在 HTML 到达客户端并执行 javascript 之前。

      但是您可以做的是让您的服务器端代码生成一段保留您价值的 javascript。

      <script type="text/javascript">
          var x = <%= ServerSideMethod() %>;
      </script>
      

      【讨论】:

      • 我的用户控件中有 3 个对象,它们的变量不一样。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 2016-03-26
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      相关资源
      最近更新 更多