2011-02-03 72 views
1

我繼承了一些我被告知要集成到ASP.NET網站的JavaScript。我認爲這將是直接的,但它是一個挑戰。通過JavaScript更新ASP.NET中的隱藏字段

的代碼看起來是這樣的:

<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

頁面生命週期的哪一部分是你正在嘗試讀取sQuestion.Value? – 2011-02-03 21:29:35

回答

7

關於ASP.net不知道,但我知道在瀏覽器的DOM中,隱藏字段的值是全部小寫的值,而不是值。這是瀏覽器提交的值屬性,並且通過設置sQuestion.Value,您未能設置其提交的值。

+0

+1好點! @Dio Javascript只會創建對象的新成員,如果它們尚未定義。有用但很危險! http://www.w3schools.com/js/js_objects.asp – 2011-02-03 21:30:45

+0

好的。我顯然有一些其他的錯誤,因爲警報現在是一個空字符串,但我會弄清楚。對此,我真的非常感激。 – Dio 2011-02-03 21:37:53

2

JavaScript腳本是否在同一個頁面上? 如果不是,我相信

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

將失敗。

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

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

您可以設置sQuestion.Value代替sQuestion.value。

我發現這個在an answer到類似的問題。

0

我不相信.NET期望在客戶端上操作HiddenField的值,所以它可能只是每次讀取ViewState值。您可以使用常規的隱藏輸入,並通過添加「RUNAT」屬性這樣使服務器控件:

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

在後面的代碼,就可以讀取類似,你有什麼上述方式的價值。它將是System.Web.UI.HtmlControls.HtmlInputHidden類型。