隐藏字段的值在javascript函数中找不到

Value of Hiddenfield not found in javascript function

本文关键字:函数 找不到 javascript 字段 隐藏      更新时间:2023-09-26

我花了几天的时间研究我的问题,并没有能够使它正常工作。我知道这里有一些与这个问题相关的话题,阅读它们对我有所帮助,但我遇到了一点障碍,希望你能朝正确的方向推动我。

我写了一个小的。net 3.5 VB。NET web应用程序,允许用户维护一些数据。它由3页组成。我不太喜欢的一个需求是,用户希望在完成所有更改后点击保存按钮,而不是每次将更改应用到网格时都保存回DB。

我使用会话对象来存储每个页面上的对象集合,并且如果用户试图更改下拉菜单的值或在有待处理操作时离开页面,则希望用对话框提示用户。在这里和其他地方进行了大量研究之后,我决定在页面上创建一个隐藏字段,并在每次在服务器端更新操作集合时更新其值。然后我想计算这个值,如果它大于0,我想提示用户保存更改。

我的函数:

<telerik:RadCodeBlock ID="RadCodeBlock2" runat="server">
    <script type="text/javascript">
        window.onbeforeunload = confirmExit;
        function confirmExit()
        {
            var actionCount = $get('<%=ActionCounterField.ClientID %>').value;
            if (actionCount > 0) {
                alert("Pending Changes!");
                  }
            }
        </script>
    </telerik:RadCodeBlock>

我的隐藏字段声明:

<asp:HiddenField id="ActionCounterField" runat="server" />

服务器端代码:

Protected Sub UpdateActionCount()
    ActionCounterField.Value = GoalCategoryActionList.Count
End Sub

当我调试应用程序并向网格添加一条记录时,服务器端代码被正确执行。我还验证了隐藏控件是由javascript函数找到的。我还没能弄清楚的是,为什么隐藏的字段值没有被函数找到。

非常感谢任何帮助。谢谢你!

好了,我知道怎么做了。我不会说这是最优雅的解决方案,但它的工作方式正是我想要的,所以我很高兴。谢谢你的回复。谢谢你的帮助。

首先,我将隐藏字段更改为telerik RadTextBox,并将其设置为不显示。RadTextBox似乎比hiddenfield更适合RadGrid。

<telerik:RadTextBox id="ActionCounterField" runat="server" style="display: none;" AutoPostBack="true" />

然后我把它连接在AjaxManager中,由我的RadGrid来改变。

<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="RadGrid1">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="ActionCounterField"></telerik:AjaxUpdatedControl>
            </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManager>

我有条件地调用确认函数。当我的用户点击保存或撤消按钮时,更改将被持久化到数据库或撤消,而不需要确认。但是,如果他们试图以任何其他方式离开页面,则会提示他们保存更改。如果点击"OK",服务器端就会调用保存按钮处理程序。如果点击"取消",则调用撤消按钮处理程序。

var allowConfirm = true
window.onbeforeunload = confirmExit;
function confirmExit()
{
    var actionCountHolder = document.getElementById("<%=ActionCounterField.ClientID %>");
    var actionCount = actionCountHolder.value;
    if (allowConfirm == true) 
    {
        if (actionCount > 0) 
        {
            var conf = confirm("You have pending changes.  Save them?");
            if (conf == true) 
            {
                var saveButton = document.getElementById("<%=btnSave.ClientID %>");
                saveButton.click()
            }
            else 
            {
                var cancelButton = document.getElementById("<%=btnCancel.ClientID %>");
                cancelButton.click();
            }
        }
    }
    else {
        allowConfirm = true;
    }
}

另外,我有保存和撤消按钮调用的OnClientClick操作的disablecconfirm函数。

<asp:Button ID="btnSave" OnClick="btnSave_Click" OnClientClick="disableConfirm()" runat="server" Text="Apply"  />
<asp:Button ID="btnCancel" OnClick="btnUndo_Click" OnClientClick="disableConfirm()" runat="server" Text="Undo"  />