【问题标题】:Updating a Hidden Field in ASP.NET via JavaScript通过 JavaScript 更新 ASP.NET 中的隐藏字段
【发布时间】:2011-06-20 23:38:54
【问题描述】:

我继承了一些被告知要集成到我们的 ASP.NET 站点中的 JavaScript。我认为这很简单,但结果却是一个挑战。

代码如下所示:

<SELECT id="Question1" name="Question" onchange="updateQuestion();">                 
<OPTION value="notChosen">--Please Select One--</OPTION>
<OPTION value="in">India</OPTION>
<OPTION value="de">Germany</OPTION>                     
<OPTION value="fr">France</OPTION>                
<OPTION value="us">United States</OPTION>                     
<OPTION value="ch">Switzerland</OPTION>                
</SELECT> 

目标是从这个 HTML 控件中获取值到 ASP.NET 中,但是这个控件本身是由另一块 javascript 动态生成的,所以我不能只是将它更改为 asp.net 控件。我的解决方案是添加 onchange="updateQuestion();"方法,此 JS 将获取这些 SELECT 标记并将值放入 ASP.NET 控件中:

function updateSecQ() {
    var sQuestion = document.getElementById('<%=sQuestion.ClientID%>');
    sQuestion.Value = "";
    var questions = document.getElementsByName('Question');
    for (question in questions) {
        if (questions[question].value != null)
            sQuestion.Value += questions[question].value + ",";
    }
    alert(sQuestion.Value);
}

如您所见,它正在寻找更新 ASP.NET 控件: &lt;asp:HiddenField ID="sQuestion" runat="server" value="" /&gt;

这似乎一切正常,但是当我在表单提交时转到服务器端时,我看到 sQuestion.Value 仍然是 = ""。

我不太确定我在这里做错了什么,任何输入将不胜感激。感谢您的宝贵时间。

【问题讨论】:

  • 您尝试在页面生命周期的哪个部分读取 sQuestion.Value?

标签: javascript asp.net


【解决方案1】:

不知道 ASP.net,但我知道在浏览器 DOM 中,隐藏字段的值是全小写的值,而不是值。是浏览器提交的value属性,设置sQuestion.Value,设置提交的值失败。

【讨论】:

  • +1 好地方! @Dio Javascript 如果尚未定义对象,则只会动态创建对象的新成员。有用但危险! w3schools.com/js/js_objects.asp
  • 好收获。我显然还有其他错误,因为警报现在是一个空字符串,但我会弄清楚的。我真的很感激。
  • ...您还在提醒 sQuestion.Value 吗? - 或者您的 getElementsByName 没有返回任何内容。不,我看到了,它是一个选择!这就是 questions[question][questions[question].selectedIndex].value - 你可以用一些临时变量来合理化它......
  • 所以:var select = questions[question]; var value = select[select.selectedIndex].value; if(!value) sQuestion.value += value + ',';
【解决方案2】:

该 JavaScript 函数是否在同一个 aspx 页面上? 如果不是我相信

var sQuestion = document.getElementById('<%=sQuestion.ClientID%>');

会失败。

如果你使用 jQuery,你可以使用:

$("[id *= 'substringOfTheASPId']").val("new value")

【讨论】:

  • 好建议。据推测,该脚本位于 aspx 页面中,但正如 OP 所说,该功能有效。
【解决方案3】:

您设置了 sQuestion.Value 而不是 sQuestion.value。

我在an answer 中发现了一个类似的问题。

【讨论】:

    【解决方案4】:

    我不相信 .NET 期望在客户端操作 HiddenField 的值,因此它可能只是每次都读取 ViewState 值。您可以使用常规隐藏输入并通过添加“runat”属性使其成为服务器控制,如下所示:

    <input type="hidden" id="myInputId" runat="server" />
    

    在后面的代码中,您可以以与上面类似的方式读取该值。它将是 System.Web.UI.HtmlControls.HtmlInputHidden 类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-16
      • 2012-05-31
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多