C# 用按钮上的JS更改asp:HiddenField.value单击

C# 用按钮上的JS更改asp:HiddenField.value单击,c#,javascript,asp.net,postback,C#,Javascript,Asp.net,Postback,我的html中有四个文本框;一个是服务器端asp:textbox,另一个是使用动态javascript在客户端呈现的。javascript创建文本区域;可能有6个,可能有90个。在这个例子中有3个 <asp:Textbox id="tbxReal" runat="server"/> <asp:button id="btnReal" runat="server" Value="go" /> <asp:HiddenField ID="hdnID" runat="serv

我的html中有四个文本框;一个是服务器端asp:textbox,另一个是使用动态javascript在客户端呈现的。javascript创建文本区域;可能有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" />
然后tbxReal的C#事件处理程序:

protected void btnReal_Click(object sender, EventArgs e)
{
    Response.Write(Convert.ToInt32(hdnID.Value) + "<BR />");
    Response.Write(tbxReal.Text + "<BR />");
}
protectedvoidbtnreal\u单击(对象发送方,事件参数e)
{
Response.Write(Convert.ToInt32(hdnID.Value)+“
”; 响应。写入(tbxReal.Text+“
”); }
我的代码用于更改tbxReal中的文本,但在回发时无法更改hdnId的值。如何修复代码,以便在Javascript中更改HiddenField的值,并让回发读取该新值


编辑:承认我知道JS中服务器端控件的ClientID是什么。

是否应该更改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();    
}
功能子模块(id)
{
hdn=document.getElementById(“”);
hdn.value=id;
警报(hdnID.value);
var Real=document.getElementById(“”);
var Fake=document.getElementById(id);
Real.value=false.value;
var按钮=document.getElementById(“”);
按钮。单击();
}
可能按钮和文本框控件正好可以使用,但由于您设置了
runat=“server”
,因此ID是用于服务器端控件的


啊,我还看到您对按钮和文本框使用了小写的
id
属性,而对HiddenField使用了大写的
id
属性。我认为这也会有所不同。

我假设
警报(hdnID.value)正在显示您希望在服务器端看到的正确值


检查以确保您没有设置
hdnID
或在
页面加载中重新绑定数据(如果已绑定),否则修改后的值将被到达
btnReal\u单击时替换。逻辑看起来很好,因此,要么你得到了一个对错误隐藏控件的引用,要么你在有机会读回之前覆盖了其他地方的值。发布呈现的html可能会有所帮助。您在示例中重复了客户端输入的id,这可能与此相关,也可能与此无关。

我在示例代码中出错;它已被编辑。我实际上解释了客户端渲染的前缀是什么;所以我知道我得到了正确的元素;那么,我猜这不是解决方案。生成的HTML是什么样子的?这似乎是使用
UpdatePanel
控件添加新文本框的合适情况。哎呀,我假设
警报(hdnID.value)
没有给出正确的值。我同意Kelsey的观点,隐藏字段可以“重置”或将其值更改为其他值的唯一方法是,如果隐藏字段的值在加载页面或其他地方被更改。
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();    
}