我的html中有四个文本框;一个是服务器端asp:textbox,其他是使用动态javascript在客户端呈现。 javascript创建textareas;可能有6个,可能有90个。在这个例子中有3个。
<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呈现的文本框/按钮。
这是我的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的值并让回发读取新值?
编辑:承认我知道服务器端控件的clientID在JS中是什么。
答案 0 :(得分:1)
我认为alert(hdnID.value);
显示的是您期望看到服务器端的正确值。
检查以确保您没有在hdnID
中设置Page_Load
或重新绑定数据(如果已绑定),否则修改后的值将替换为您到达的时间{{1 }}
答案 1 :(得分: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
属性。我认为这也有所不同。
答案 2 :(得分:0)
逻辑看起来很好,所以你要么得到一个错误的隐藏控件的引用,要么在你有机会读回它之前覆盖其他地方的值。发布您呈现的HTML可能会有所帮助。在您的示例中,您已经为您的客户端输入重复了一个id。或者可能没有关系。