如何在网站项目的代码文件中访问页面类和用户控件

用户名

我正在尝试将ASP.net Web应用程序转换为网站。我遇到的一个问题是试图访问我的代码文件中的用户控件和母版页。

下面的代码显示了我用于基类的类,它继承自System.Web.UI.Page。

public class AdminBase : BasePage
{
    DeniedAccess deniedAccessControl;

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        //All pages that inherit from this will have a denied access control which will display when an admin of one instance tries to access admin pages of a different instance 
        //which they don't have access to. This enables us to still use the built in web.config authroisation API 

        deniedAccessControl = (DeniedAccess)Page.LoadControl("~/App_Controls/DeniedAccess.ascx");

       ((MasterPage1)Master).MainContent.Controls.Add(deniedAccessControl);

    }

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

        if (deniedAccessControl.ContentVisible)
        {
            foreach (Control control in ((MasterPage1)Master).MainContent.Controls)
            {
                //only sets to false if the control is set to true as it will error if you try to set a non visiual controls "Visible" property. E.g an sqldatasource control
                if (control.GetType() != deniedAccessControl.GetType() && control.Visible)
                      control.Visible = false;
            }
        }
    }


}

如果用户未通过某些自定义授权,则“ DeniedAccess”控件是我正在动态添加的用户控件。

当这是一个Web应用程序时,这工作得很好,因为DeniedAccess控件被编译到同一个dll中,因此我可以从代码中访问它。现在它是一个网站,因为它不在App_Code文件夹中,所以它找不到名称空间/类。

我正在网站项目中尝试做的事情吗?我似乎找不到办法,我看到的唯一替代方法是必须为每个单独的页面编写此代码,而不是在基础页面上使用它。

当出于相同原因试图将母版页投射到“ MasterPage1”类时,我也遇到相同的问题,它找不到它,所以我无法访问它的属性。

用户名

我最终创建了两个接口来解决此问题,因为它不是文件后面的代码,我不能只在源代码中添加对控件/母版页的引用。

我让我的usercontrol继承了这个界面

public interface IDeniedAccessControl 
{
   bool ContentVisible
   {
       get;
   }
}

我的母版页继承了这一页

public interface IMasterPage
{
   void AddControl(Control control);

   ControlCollection MainContentControls
   {
       get;
   }
}

然后,使用户控件和母版页在其中实现具有所需功能的相应界面。

母版页实现:

    public void AddControl(Control control)
    {
       ContentPlaceHolder1.Controls.Add(control);
    }


   public ControlCollection MainContentControls
   {
       get { return ContentPlaceHolder1.Controls; }
   }

用户控件的实现:

        bool IDeniedAccessControl.ContentVisible
        {
           get { return ContentASPxPanel.Visible; }
        }

然后,我可以在任何代码文件上使用它。以下是我如何编辑原始代码。

    public class AdminBase : BasePage
    {
    IDeniedAccessControl deniedAccessControl;

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        //All pages that inherit from this will have a denied access control which will display when an admin of one instance tries to access admin pages of a different instance 
        //which they don't have access to. This enables us to still use the built in web.config authroisation API 
        deniedAccessControl = (IDeniedAccessControl)Page.LoadControl("~/App_Controls/DeniedAccess.ascx");

       ((IMasterPage)Master).AddControl((Control)deniedAccessControl);

    }

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

        if (deniedAccessControl.ContentVisible)
        {
            foreach (Control control in ((IMasterPage)Master).MainContentControls)
            {
                //only sets to false if the control is set to true as it will error if you try to set a non visiual controls "Visible" property. E.g an sqldatasource control
                if (control.GetType() != deniedAccessControl.GetType() && control.Visible)
                    control.Visible = false;
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在网站项目的页面上使用其他C#源文件?

来自分类Dev

如何在Laravel / OctoberCMS网站的单独项目的子目录中设置/访问页面?

来自分类Dev

如何在网站中搜索文件?

来自分类Dev

从页面/用户控件中的代码块定义类继承

来自分类Dev

如何访问用户控件的项目

来自分类Dev

如何在网站中添加丰富代码段?

来自分类Dev

如何在网站中添加丰富代码段?

来自分类Dev

你如何在网站中执行python代码

来自分类Dev

如何在网站中查找和提取“主”图像

来自分类Dev

我如何在网站中显示HTML代码和JavaScript像字符串一样

来自分类Dev

如何在两个项目共享的xaml文件中添加用户控件的引用

来自分类Dev

如何在ng-repeat中访问和使用每个项目的索引

来自分类Dev

如何在ng-repeat中访问和使用每个项目的索引

来自分类Dev

如何插入显示在网站每个页面上的代码?

来自分类Dev

如何在独立于页面的用户控件的页面加载中读取父控件的ID?

来自分类Dev

如何在网站中嵌入Photosphere?

来自分类Dev

如何在网格控件的绑定列表中显示选择性项目

来自分类Dev

在网站和Cordova项目之间共享文件

来自分类Dev

如何重用解决方案中另一个项目的Web用户控件?

来自分类Dev

初学者问题:如何在网站上上传和使用w / PHP文件?

来自分类Dev

用户如何在网站上导入图片

来自分类Dev

ListViewItem的控件模板-如何访问项目的属性

来自分类Dev

如何在 Asp.Net 的代码隐藏文件中访问服务器端控件?

来自分类Dev

如何在不编辑的情况下将.js文件包含到项目的所有jsp页面中?

来自分类Dev

如何在网站上使用python matplotlib代码?

来自分类Dev

如何在iOS 8的代码中访问和操作大小类

来自分类Dev

如何在用户控件WinForm中访问托管表单上的控件

来自分类Dev

如何在源文件中添加源代码文件作为构建依赖项和/或访问定义?

来自分类Dev

如何在不提供绝对路径的情况下访问PyDev项目的资源目录中的文件?

Related 相关文章

  1. 1

    如何在网站项目的页面上使用其他C#源文件?

  2. 2

    如何在Laravel / OctoberCMS网站的单独项目的子目录中设置/访问页面?

  3. 3

    如何在网站中搜索文件?

  4. 4

    从页面/用户控件中的代码块定义类继承

  5. 5

    如何访问用户控件的项目

  6. 6

    如何在网站中添加丰富代码段?

  7. 7

    如何在网站中添加丰富代码段?

  8. 8

    你如何在网站中执行python代码

  9. 9

    如何在网站中查找和提取“主”图像

  10. 10

    我如何在网站中显示HTML代码和JavaScript像字符串一样

  11. 11

    如何在两个项目共享的xaml文件中添加用户控件的引用

  12. 12

    如何在ng-repeat中访问和使用每个项目的索引

  13. 13

    如何在ng-repeat中访问和使用每个项目的索引

  14. 14

    如何插入显示在网站每个页面上的代码?

  15. 15

    如何在独立于页面的用户控件的页面加载中读取父控件的ID?

  16. 16

    如何在网站中嵌入Photosphere?

  17. 17

    如何在网格控件的绑定列表中显示选择性项目

  18. 18

    在网站和Cordova项目之间共享文件

  19. 19

    如何重用解决方案中另一个项目的Web用户控件?

  20. 20

    初学者问题:如何在网站上上传和使用w / PHP文件?

  21. 21

    用户如何在网站上导入图片

  22. 22

    ListViewItem的控件模板-如何访问项目的属性

  23. 23

    如何在 Asp.Net 的代码隐藏文件中访问服务器端控件?

  24. 24

    如何在不编辑的情况下将.js文件包含到项目的所有jsp页面中?

  25. 25

    如何在网站上使用python matplotlib代码?

  26. 26

    如何在iOS 8的代码中访问和操作大小类

  27. 27

    如何在用户控件WinForm中访问托管表单上的控件

  28. 28

    如何在源文件中添加源代码文件作为构建依赖项和/或访问定义?

  29. 29

    如何在不提供绝对路径的情况下访问PyDev项目的资源目录中的文件?

热门标签

归档