使用Javascript更改隐藏字段值不会改变C#代码

时间:2012-03-03 02:13:42

标签: c# javascript jquery asp.net

我正在尝试使用javascript更改隐藏字段,然后在我的代码隐藏中使用该更改的值。我在Page_Load中有一个断点来检查HiddenField1的值是否已经改变但是在回发时它总是保持为0。

    <script type="text/javascript">
        $(document).ready(function () {
        var hiddenControl = '<%= HiddenField1.ClientID %>';
        var s = $('#cbox');

        $("#cbox").combobox({
            selected: function (event, ui) {
                alert(s.val());
                document.getElementById(hiddenControl).value = s.val();
                alert(document.getElementById(hiddenControl).value);
            }
        });
   });

   <asp:HiddenField ID="HiddenField1" runat="server" EnableViewState="False" Value="0" />

如果我无法使用此功能,是否还有其他方法可以在javascript和c#codebehind之间传递信息?

6 个答案:

答案 0 :(得分:1)

您可能需要注意HiddenField的客户端ClientID,然后在回发期间查看Request.Form集合服务器端的相应值。

这样您将检查发送到服务器的值。 如果值正确,则可能会出现问题,因为有些东西会扰乱ProcessPostData (例如,手动重置或动态更改表单组织)

虽然很难在没有完整代码的情况下提出建议,但我同意那些说EnableViewState = false令人惊讶的建议。

答案 1 :(得分:0)

查看HiddenField的MS文档中的示例:

Form1.HiddenField1.value = s.val();

本页底部 - http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.hiddenfield.aspx

答案 2 :(得分:0)

尝试使用html隐藏变量

执行相同的任务
 <input id="hdName" runat="server" type="hidden" />

由于我们提供了runat =“server”,我们将能够在服务器端和hdName.Value上访问此变量,我们可以在服务器端获取该值。认为这是html控件我们需要在javascript中提供hdName.ClientID,因为我们已经给出了runat = server。

document.getElementById('<%= hdName.ClientID %>').value 

希望这可以解决您的问题并为您提供所需的结果。 感谢

答案 3 :(得分:0)

虽然你总是可以使用set get方法存储java脚本中的值... 但这里有一些简单的解决方法......

案例1 - 如果控制仅用于存储目的,
      把display:none放在它的风格和制作中       在控件的属性中visible = true。

案例2 - 如果要显示控件但在禁用模式下,则将ReadOnly =“true”而不是

   eg..

    <asp:textbox runat="server" ID="textbox1" Enabled="false"></asp:textbox> will not work

    <asp:textbox runat="server" ID="textbox2" ReadOnly="true"></asp:textbox> will work

答案 4 :(得分:0)

将您的HiddenField放在UpdatePanel中,并将HiddenField与ClientID一起使用。

答案 5 :(得分:0)

我的回答类似于其他人所说的获取隐藏变量/控件,可以将其传递回服务器端代码,如Button事件或Page_Load等。我从他们那里得到了这个想法。但这是:

<asp:TextBox ID="hdnErrorMsg" ClientIDMode="Static" style="display: none;" runat="server"/>

这可以在JavaScript中设置,它将返回到Server Side Asp.NET并被使用和检查。如果你想在它回到客户端时保留它,你可能不得不把它和你需要的所有其他东西放回去。在我的情况下,这是一个错误消息。我希望它停止在ASP.NET按钮单击事件中进行保存并退出,但是我需要将错误内容放回去,以便当它返回到客户端时它会再次出现。