我继承了一些我被告知要集成到我们的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控件:
<asp:HiddenField ID="sQuestion" runat="server" value="" />
这看起来一切正常,但是当我在表单上转到服务器端时,我看到sQuestion.Value仍然是=“”。
我不太确定我在这里做错了什么,任何输入都会非常感激。谢谢你的时间。
答案 0 :(得分:7)
答案 1 :(得分:2)
这个JavaScript函数是否在同一个aspx页面上? 如果不是我相信
var sQuestion = document.getElementById('<%=sQuestion.ClientID%>');
会失败。
如果你使用jQuery,你可以使用:
$("[id *= 'substringOfTheASPId']").val("new value")
答案 2 :(得分:0)
您设置了sQuestion.Value而不是sQuestion.value。
我在an answer中发现了类似的问题。
答案 3 :(得分:0)
我不相信.NET期望在客户端上操纵HiddenField的值,因此它可能每次只读取ViewState值。您可以使用常规隐藏输入并通过添加“runat”属性进行服务器控制,如下所示:
<input type="hidden" id="myInputId" runat="server" />
在后面的代码中,您可以按照与上面相似的方式读取值。它的类型为System.Web.UI.HtmlControls.HtmlInputHidden。