使用Javascript更改HiddenField的值,但在C#代码后端未发生更改

3

我正在尝试使用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#后台代码之间传递信息?

在 Page_PreRender 中,值仍为默认值0。 - John Doe
你为什么禁用了ViewState?它引起了问题吗?还是你只是想尽一切办法防止隐藏字段丢失? - John Pick
一直在尝试防止隐藏字段丢失。认为视图状态可能会将其重置为默认值0。 - John Doe
我添加了更多的代码,但它只是一个更大项目中的一小部分。 - John Doe
你使用的是哪个版本的.NET框架?当ASP.NET 1.1发布时,我在页面上放了一个ASP:Textbox和一个日期选择器弹出窗口,效果非常好。但随着ASP.NET 2.0的推出,无论以何种方式使用JavaScript修改任何字段,表单回传的值始终是表单最初开始时的值,这与你面临的情况类似。回过头来看,我从未尝试触发"change"事件,你尝试在所选事件内执行$('#' + hiddenControl ).change();,看看是否可以使回传值保留。 - Nick Bork
显示剩余5条评论
6个回答

1

你可能想要注意 HiddenField 的客户端 ClientID,然后在 postback 期间在服务器端查看相应的 Request.Form 集合中的值。

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

虽然没有整个代码很难给出建议,但我同意那些说 EnableViewState=false 很令人惊讶的观点。


0

尝试过了,但是说Form1未定义。我认为这并不重要,因为在问题代码中,我通过ID引用它,并搜索文档。 - John Doe
1
表单 ID 是 form1,但涉及到母版页,因此可能会有更多的嵌套? - John Doe
这个字段有可能不在form1中吗?你能否通过在服务器上将其设置为其他值(并将其发送回来)来进行测试? - shanabus

0
尝试使用HTML隐藏变量完成相同的任务。
 <input id="hdName" runat="server" type="hidden" />

由于我们提供了runat="server",因此我们将能够在服务器端访问此变量,并且在hdName.Value上,我们可以在服务器端获取值。虽然它是HTML控件,但我们需要在JavaScript中提供hdName.ClientID,因为我们已经给出了runat=server。

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

希望这能解决您的问题并给您所需的结果。 谢谢


与 ASP 隐藏字段相同的结果 - John Doe
请您在页面源代码中检查控件的名称,并在此处共享HTML隐藏字段的名称。 - Asif Mukhida

0
将您的 HiddenField 放置在 UpdatePanel 中,并使用带有 ClientID 的 HiddenField。

0

虽然您可以始终使用set get方法来存储来自JavaScript的值...但这里有一些简单的方法来解决它...

情况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

0

我的答案与其他人的类似,可以获取一个隐藏的变量/控件,将其传递回服务器端代码后台,例如按钮事件或页面加载等。我从他们那里得到了这个想法。但是这里是:

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

这可以在JavaScript中设置,然后返回到服务器端Asp.NET进行使用和检查。如果您希望在返回客户端时保留它,可能需要将其及所有其他所需内容放回去。在我的情况下,它是一个错误消息。我希望它停留在ASP.NET按钮单击事件中以保存并退出,但我需要将错误信息放回去,以便当它再次返回客户端时仍然存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接