【问题标题】:get the Page's HiddenField Value in UserControl on Page在页面上的 UserControl 中获取页面的 HiddenField 值
【发布时间】:2015-08-28 17:55:57
【问题描述】:

我想读取放置在该页面上的用户控件中的页面(.aspx)隐藏字段值并处理一些逻辑。

例如:我在页面上有一个隐藏字段 x。该页面有许多用户控件,我想访问这些用户控件中的这个隐藏字段 (x),其中 x 的值将由页面中的 Javascript 设置。

我试图找到 HiddenControl 并从 usercontrol(.ascx.cs) 的代码隐藏中读取它的值,但总是得到 null。

HiddenField colname = UIUtils.FindControlRecursive(this.Parent.Page, "MainContent_AssignedTo_ColName") as HiddenField;

ID 与客户端的隐藏字段相同。我也尝试了this.Parentthis.Parent.Parent 作为第一个参数,但没有运气。

我在这里错过了什么。

【问题讨论】:

    标签: javascript c# asp.net hidden-field


    【解决方案1】:

    这是我的 aspx 页面:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestFindControl._Default" %>
    <%@ Register Src="ReadHiddenField.ascx" TagName="Assign" TagPrefix="uc1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <asp:HiddenField ID="HiddenField1" runat="server" Value="10">
        </asp:HiddenField>
    
    <asp:placeholder ID="Placeholder1" runat="server"><uc1:Assign id="test" runat="server"></uc1:Assign> </asp:placeholder> 
        </div>
        </form>
    </body>
    </html>
    

    这是我的控制代码:

    protected void Page_Load(object sender, EventArgs e)
            {
                HiddenField test = (HiddenField)Page.FindControl("HiddenField1");
                var j = test.Value;
    
            }
    

    【讨论】:

    • 我也在这里尝试过,但没有运气...我会尽快发布我的页面代码。
    • 我使用母版页已经有一段时间了 - 但这里有一些东西可以尝试。尝试首先使用我在第一个答案中所做的相同方式获取内容持有者 - 但要转换它的类。然后将 Page 替换为您为内容持有者提供的名称。这可能有效。
    【解决方案2】:

    试试:

    HiddenField colname = (HiddenField)Page.FindControl("The id of control");
    

    【讨论】:

    • 您的控件是否在占位符内?
    • 是的,它在内容占位符中,这就是我们在找到它时将 MainContent_ 附加到 Hiddenfield 的 ID 的原因。并且UserControl也在同一个Content PlaceHolder中
    • 你的意思是(HiddenField)&lt;IDof ContentPlaceHolder&gt;.FindControl("The id of control"); 我觉得不行。如果我误会了,请告诉我。
    • 我在我的开发机器上测试了你的场景 - 我的原始答案应该可以工作。
    • 好的,让我告诉你更多细节。页面上有许多此用户控件的实例。假设用户控件是一个网格。当用户更新一行时,我会使用 Javascript 在此隐藏字段中获取列名,并且如您所知,rowUpdating 事件会在此网格的代码隐藏中触发,该网格是我们的用户控件。我想要的只是在我的行编辑事件中编辑了哪一列。但是上面的代码 sn -p 返回 NULL。这让我感到惊讶并在这里发布以验证我是否做错了什么。
    【解决方案3】:
    private void GetParentPageHiddenField()
        {
            System.Web.UI.WebControls.HiddenField ParenthiddenField = null;
            Control ctl = this.Parent;
            while (true)
            {
                ParenthiddenField = (System.Web.UI.WebControls.HiddenField)ctl.FindControl("ParentPageHiddenFieldID");
                if (ParenthiddenField == null)
                {
                    if (ctl.Parent == null)
                    {
                        return;
                    }
                    ctl = ctl.Parent;
                    continue;
                }
                break;
            }
            var parentHiddenFieldValue=ParenthiddenField.Value;
        }
    

    【讨论】:

    • 在用户控制页面中
    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 2015-02-09
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多