2010-08-27 80 views
1

我的html中有四個文本框;一個是serverside asp:textbox,另一個是使用動態javascript在客戶端渲染的。 javascript創建了textareas;有可能是6,有可能是90.在這個例子中有3在ButtonClick上使用JS更改asp:HiddenField.value

<asp:Textbox id="tbxReal" runat="server"/> 
<asp:button id="btnReal" runat="server" Value="go" /> 
<asp:HiddenField ID="hdnID" runat="server" /> 

<textarea rows="10" cols="60" id="one"></textarea> 
<input onclick="sub('one');" type="button" value="Go_One" /> 

<textarea rows="10" cols="60" id="two"></textarea> 
<input onclick="sub('two');" type="button" value="Go_Three" /> 

<textarea rows="10" cols="60" id="one"></textarea> 
<input onclick="sub('three');" type="button" value="Go_Three" /> 

我希望能夠提交的JavaScript呈現文本/通過1臺服務器側控制按鈕。

這裏是我的javascript:

function sub(id) 
{ 
    hdn = document.getElementById('WhatGetsAppended_hdnID'); 
    hdn.value = id; 
    alert(hdnID.value); 

    var Real = document.getElementById('WhatGetsAppended_tbxReal'); 
    var Fake = document.getElementById(id); 
    Real.value = Fake.value; 

    var button = document.getElementById('WhatGetsAppended_btnReal'); 
    button.click();  
} 

那麼對於tbxReal C#的事件處理程序:

protected void btnReal_Click(object sender, EventArgs e) 
{ 
    Response.Write(Convert.ToInt32(hdnID.Value) + "<BR />"); 
    Response.Write(tbxReal.Text + "<BR />"); 
} 

我的代碼工作改變內tbxReal的文字,但我無法改變的值發生回發時的hdnId。如何修復我的代碼,以便我可以在Javascript中更改HiddenField的值並讓回發讀取新值?

編輯:確認我知道JS中的服務器控件的客戶端ID是什麼。

+0

生成的HTML看起來像什麼? – palswim 2010-08-27 17:39:16

+0

這似乎是使用'UpdatePanel'控件添加新文本框的適當情況。 – lincolnk 2010-08-27 18:35:05

回答

0

不應該改變你的JavaScript來使用控件的ClientID屬性嗎?

function sub(id) 
{ 
    hdn = document.getElementById("<%=hdnID.ClientID%>"); 
    hdn.value = id; 
    alert(hdnID.value); 
    var Real = document.getElementById("<%=tbxReal.ClientID%>"); 
    var Fake = document.getElementById(id); 
    Real.value = Fake.value; 
    var button = document.getElementById("<%=btnReal.ClientID%>"); 
    button.click();  
} 

也許它發生在對Button和TextBox控件的工作,但因爲你設置runat="server",該ID是在服務器端控制。

嗯,我還看到你正在使用Button和TextBox的小寫id屬性,但是HiddenField的大寫ID屬性。我認爲這也有所作爲。

+0

我在示例代碼中犯了一個錯誤;它已被編輯。我實際上考慮了客戶端渲染的前綴是什麼;所以我知道我正確地獲得了正確的元素。 – Mark 2010-08-27 17:35:39

+0

我明白了;那麼猜測這不是解決方案。 – palswim 2010-08-27 17:39:42

1

我假設alert(hdnID.value);正在顯示您期待看到服務器端的正確值。

檢查以確保您沒有設置hdnIDPage_Load否則修改的值重新綁定數據(如果它被綁定)將到達btnReal_Click的時候進行更換。

+0

哎呀,我假設'alert(hdnID.value);'沒有給出正確的值。 – palswim 2010-08-27 18:36:19

+0

我同意凱爾西的觀點,隱藏字段可以「重置」或將其值更改爲其他值的唯一方法是如果隱藏字段的值在Page_load或其他地方更改。 – 2011-02-18 16:33:12

0

邏輯看起來很好,所以要麼你得到一個錯誤的隱藏控件的引用,要麼在你有機會讀取它之前在其他地方覆蓋這個值。發佈你的呈現的html可能會有幫助在您的示例中,您可能會或可能不會重複您的客戶端輸入的id。