2012-07-26 196 views
4

我有一個帶有三個隱藏字段的ASP.NET頁面。 (只是如果我能得到它的工作人會做到這表明我已經試過幾件事情。)獲取隱藏字段的值

<input type="hidden" id="hiddenSkillId1" runat="server" /> 
<input type="hidden" id="hiddenSkillId2" /> 
<asp:HiddenField ID="hiddenSkillId3" runat="server"/>  

我也有正在由一個AJAXControlToolKit.AutoCompleteExtender.OnClientItemSelected事件調用JavaScript函數:

<script type="text/javascript"> 
function SkillPartialMatchSelected(source, eventArgs) { 
    document.getElementById("ctl00_Content_hiddenSkillId1").Value = eventArgs.get_value(); 
    document.getElementById("hiddenSkillId2").Value = eventArgs.get_value(); 
    document.getElementById("ctl00_Content_hiddenSkillId3").Value = eventArgs.get_value(); 
} 
</script> 

使用一個斷點並檢查這些值,我已經確認在客戶端設置了值。

最後,我將C#代碼放在連接到LinkBut​​ton OnClick事件的頁面後面。

protected void AddSkillToProspect(object sender, EventArgs e) 
{ 
    string selectedKey1 = Request.Form[hiddenSkillId1.ClientID]; 
    string selectedKey2 = Request.Form["hiddenSkillId2"]; 
    string selectedKey3 = Request.Form[hiddenSkillId3.ClientID]; 
    string selectedItem = SkillNameBox.Text.Trim(); 
    ... 
} 

所有三個selectedKey值都是null,但ASP.NET Text Edit中的selectedItem值有一個值。

從我讀過的,其中一個應該工作。我錯過了什麼嗎?我能做些什麼來將客戶端的JavaScript函數的值返回到服務器端?

+0

你真的需要通過Request.Form獲取值嗎?這不會工作:string selectedKey1 = hiddenSkillId1;字符串selectedKey3 = hiddenSkillId3; //但它不適用於hiddenSkillId2,因爲沒有runat = server。 – tgolisch 2012-07-26 17:50:48

+0

如果我知道我在做什麼,哈哈,是的。我已經工作了8年的老遺產,剛剛學習網絡開發。我根據以下答案嘗試了您的建議,但沒有奏效。它運行正常,但保存在客戶端的數據在服務器端看不到。 – 2012-07-26 18:55:04

回答

6

的問題是涉及到區分大小寫JavaScript的。雖然您爲這些字段設置了.Value,但它與.value不同。改變你的JavaScript設置。值,你應該都設置。

<script type="text/javascript"> 
function SkillPartialMatchSelected(source, eventArgs)  
{ 
    document.getElementById("ctl00_Content_hiddenSkillId1").value = eventArgs.get_value(); 
    document.getElementById("hiddenSkillId2").value = eventArgs.get_value(); 
    document.getElementById("ctl00_Content_hiddenSkillId3").value = eventArgs.get_value(); 
} 
</script> 
+0

就是這樣。兩個答案都是一個難題,但這是我沒有看到自己的部分。 – 2012-07-26 20:13:46

2

您hiddens控件有runat=server對他們意味着它們是服務器控件,您可以通過它們的ID在你的代碼中訪問他們身後

這樣的差異將hiddenSkillId1是htmlserver控制,hiddenSkillId2普通HTML控件,這一次hiddenSkillId3是一個asp.net控制

string selectedKey1 = hiddenSkillId1.Value; 
string selectedKey3 = hiddenSkillId3.Text; 
string selectedKey2 = Request.Form[hiddenSkillId2]; 

所以請嘗試使用這種方式

+0

我會試試這個,但現在我有另一個問題。現在我的OnClientItemSelected中的JavaScript函數的斷點沒有被命中。它昨天有效。 – 2012-07-26 18:25:13

+0

@SteveWash請給我看看它的代碼,或者我不介意你,如果你想提出它作爲一個新的問題 – HatSoft 2012-07-26 18:29:27

+0

它的VS設置的地方。它必須在筆記本電腦上設置爲True,我昨天正在工作。我現在可以調試Javascript部分(回到我的筆記本電腦上)並打開斷點。這些值被分配給客戶端的隱藏字段,但是它在服務器端的「」。 – 2012-07-26 18:49:13