如何从后面的DNN皮肤代码访问asp.net控件

时间:2019-03-21 19:28:46

标签: c# asp.net dotnetnuke

我正在使用Christoc's DNN templates在DNN外观上工作,当我在home.ascx文件上创建普通的ASP.NET控件时,无法在后面的代码中引用它。

我知道在普通的Web项目中,aspx.designer.cs文件可以控制所有内容,但是我不知道如何为.ascx文件生成文件,或者即使那样也应该在DNN中工作皮肤。

如何从DNN外观模板中的代码引用ASP.NET控件?

这是我要访问的控件:

<asp:HyperLink ID="hlAccountSettings" runat="server">My Account</asp:HyperLink>

以及背后的代码:

namespace Company.Modules.CompanySkin2019
{        
    public partial class Home : SkinBase
    {
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            UserInfo currUserInfo = UserController.Instance.GetCurrentUserInfo();
            hlAccountSettings.NavigateUrl = Globals.NavigateURL(PortalSettings.ActiveTab.TabID, "Profile", "userId=" + currUserInfo.UserID, "pageno=1"); 
            // ^ ERROR: The name 'hlAccountSettings' does not exist in the current context
        }
    }
}

1 个答案:

答案 0 :(得分:0)

在我们的示例中,我们创建了一个用户控件,例如:

<div class="checkbox">
    <label>
        <asp:CheckBox ID="changeForAll" runat="server" OnCheckedChanged="changeForAll_OnCheckedChanged" Text="Apply changes for all devices" Checked="True" AutoPostBack="true" />
    </label>
</div>

以及背后的代码:

 public partial class ChangeForAllCheckbox : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            changeForAll.Checked = ...;
        }
    }

    protected void changeForAll_OnCheckedChanged(object sender, EventArgs e)
    {
        [...]
    }
}