在按钮单击上使用JS更改asp:HiddenField.value

时间:2010-08-27 17:04:02

标签: c# javascript asp.net postback

我的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中是什么。

3 个答案:

答案 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。或者可能没有关系。