ASP.Net - C# - 将页面作为参数传递

发布于 2024-12-01 18:57:33 字数 572 浏览 0 评论 0原文

我有一个网站。我想从网站的每个页面调用一个函数,该函数将接收 Page 类型的参数。每个页面都会将其自身的引用传递给该函数。

该函数将根据某些逻辑隐藏和显示该页面上的某些控件。

现在我不知道如何传递页面参数。如果我传递“this”,我将无法找到任何我想要隐藏或显示的控件。这是我的函数

public static void Implement(string pageName, Page objPage)
    {
        if (pageName == "MANAGEMENT")
        {
            HyperLink obj = (HyperLink) objPage.FindControl("hlSave");
            if (obj != null)
            {
                obj.Visible = false;
            }
        }
    }

,但 objPage.FindControl("hlSave"); 总是返回 null

知道这里出了什么问题吗?

I have a website. from each page of website I want to call a function which will receive a parameter of type Page. Each page will pass reference of itself to that function.

That function will hide and show some control on that page based on some logic.

Now I am not sure how to pass the page parameter. If I pass "this", I am unable to find any controls which I want to hide or show. This is my function

public static void Implement(string pageName, Page objPage)
    {
        if (pageName == "MANAGEMENT")
        {
            HyperLink obj = (HyperLink) objPage.FindControl("hlSave");
            if (obj != null)
            {
                obj.Visible = false;
            }
        }
    }

but objPage.FindControl("hlSave"); always returns null

Any idea whats wrong here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷爱 2024-12-08 18:57:33

如果您使用母版页,则可能会导致FindControl返回null。在这种情况下,您可以使用:

HyperLink obj = (HyperLink)objPage.Master.FindControl("ContentPlaceHolderID").FindControl("hlSave");

或者您可以使用以下方法递归查找 hlSave

    public static Control FindControlRecursive(Control Root, string Id)
    {
        if (Root.ID == Id)
            return Root;

        foreach (Control Ctl in Root.Controls)
        {
            Control FoundCtl = FindControlRecursive(Ctl, Id);
            if (FoundCtl != null)
                return FoundCtl;
        }

        return null;
    }

您可以像这样使用它:

HyperLink obj = (HyperLink)FindControlRecursive(objPage, "hlSave");

If you are using master page then that might causing FindControl to return null. In that case you can use:

HyperLink obj = (HyperLink)objPage.Master.FindControl("ContentPlaceHolderID").FindControl("hlSave");

or you can recursively find hlSave using below method:

    public static Control FindControlRecursive(Control Root, string Id)
    {
        if (Root.ID == Id)
            return Root;

        foreach (Control Ctl in Root.Controls)
        {
            Control FoundCtl = FindControlRecursive(Ctl, Id);
            if (FoundCtl != null)
                return FoundCtl;
        }

        return null;
    }

you can use it like:

HyperLink obj = (HyperLink)FindControlRecursive(objPage, "hlSave");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文