gpt4 book ai didi

asp.net - 通过 javascript 更改的隐藏字段在回发时不保留

转载 作者:行者123 更新时间:2023-12-01 02:38:48 25 4
gpt4 key购买 nike

我有一个带有隐藏字段的 Web 用户控件。当发生 javascript 事件(单击)时,我尝试在隐藏字段中设置一个值,以便可以在回发时保留该值并在下次渲染时记住该值。该控件是一个可折叠面板扩展器,不会导致回发,使用 jquery,如果回发发生在页面的其他位置,它会记住它是展开还是折叠。

问题是 JavaScript 执行了,但实际上并没有更改隐藏字段中的值。如果我使用 dom 资源管理器,隐藏字段仍设置为默认值,然后当我调试时,在下一次回发中隐藏字段仍设置为默认值。

我也尝试过使用经过验证的 getElementById,但没有成功。

没有发生 JavaScript 错误。

ASCX code:

<input id="hiddenCurrentState" type="hidden" runat="server" />

Codebehind:

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;

public partial class Controls_SubControls_CollapsiblePanelExtender : System.Web.UI.UserControl
{
public string HeaderControlId { get; set; }

public string BodyControlId { get; set; }

public string CollapseAllControlId { get; set; }

public string ShowAllControlId { get; set; }

public CollapsedState DefaultState { get; set; }

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
hiddenCurrentState.Value = DefaultState.ToString();
}
}

protected override void OnPreRender(EventArgs e)
{
BuildJQueryScript();
base.OnPreRender(e);
}

private void BuildJQueryScript()
{
StringBuilder script = new StringBuilder();

script.Append("$(document).ready(function(){\n");

//toggle based on current state
script.Append("if ($(\"#" + hiddenCurrentState.ClientID + "\").attr(\"value\")==\"Expanded\")\n");
script.Append("{\n");
script.Append("$(\"#" + BodyControlId + "\").show();\n");
script.Append("$(\"#" + hiddenCurrentState.ClientID + "\").val(\"Expanded\");\n");
script.Append("}\n");
script.Append("else\n");
script.Append("{\n");
script.Append("$(\"#" + BodyControlId + "\").hide();\n");
script.Append("$(\"#" + hiddenCurrentState.ClientID + "\").val(\"Collapsed\");\n");
script.Append("}\n");


//toggle on click
script.Append("$(\"#" + HeaderControlId + "\").click(function(){\n");
script.Append(" $(this).next(\"#" + BodyControlId + "\").slideToggle(500)\n");
script.Append(" return false;\n");
script.Append("});\n");

//collapse all
if (!String.IsNullOrEmpty(CollapseAllControlId))
{
script.Append("$(\"#" + CollapseAllControlId + "\").click(function(){\n");
script.Append(" $(\"#" + BodyControlId + "\").slideUp(500)\n");
script.Append(" return false;\n");
script.Append("});\n");
}

//show all
if (!String.IsNullOrEmpty(ShowAllControlId))
{
script.Append("$(\"#" + ShowAllControlId + "\").click(function(){\n");
script.Append(" $(this).hide()\n");
script.Append(" $(\"#" + BodyControlId + "\").slideDown()\n");
//script.Append(" $(\".message_list li:gt(4)\").slideDown()\n");
script.Append(" return false;\n");
script.Append("});\n");
}

script.Append("});\n");

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CollapsiblePanelScript", script.ToString(), true);
}
}

public enum CollapsedState
{
Expanded = 0,
Collapsed = 1
}

最佳答案

我不明白你在客户端哪里设置隐藏字段的值。我希望在折叠/显示函数中看到类似以下内容的行,以在面板折叠/展开时实际更改客户端上的值。

折叠:

 script.Append( "   $(\"#" + hiddenCurrentState.ClientID + "\").val(1);\n" );

显示:

 script.Append( "   $(\"#" + hiddenCurrentState.ClientID + "\").val(0);\n" );

关于asp.net - 通过 javascript 更改的隐藏字段在回发时不保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/689758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com