从ASCX控件调用ASPX方法

时间:2011-10-31 22:08:42

标签: asp.net

我在home.aspx上有一个方法HasAdminRole(),我从ASCX控件调用。并且ASCX使用(Home)this.Page).HasAdminRole()与home.aspx上的用户控件

现在,当我将相同的ASCX添加到不同的ASPX页面Adminuser.aspx时,当ASCX尝试从不同的ASPX页面调用(Home)this.Page).HasAdminRole()时出现错误的.aspx

我收到错误无法将“ASP.adminuser_aspx”类型的对象强制转换为“CALE.Home”。

如何在多个ASPX上使用相同的ASCX并且用户控件尝试在Home.aspx上调用单个方法时解决此问题

2 个答案:

答案 0 :(得分:2)

建议将您的管理员/角色逻辑从.aspx转移到可从.aspx和.ascx访问的类中。它有点“关注点分离”,并且在公共区域中使用逻辑有点整洁。基本上 - 只在页面代码中保留与页面相关的逻辑。

public static class Roles
{
    public static HasAdminRole(User someUser)
    {
       // implementation
    }
}

从任何页面的代码隐藏或其他帮助程序类调用它:

 User foo;
 bool isAdmin = Roles.HasAdminRole(foo);

答案 1 :(得分:0)

所以我只是想出了解决这个问题的方法。

您可以在aspx页面中创建客户端触发器,并使用ascx页面中的javascript调用它。

e.g。

aspx页面:

<script>
 function doSomething()
 {
    //set hidden field values or do whatever else you might need to do here
    $('#<%= btnDoSomething.ClientID%>').click();
 }
</script>

 <asp:Button runat="server" ID="btnDoSomething" OnClick="btnDoSomething_Click" CssClass="hidden" />

背后的aspx代码:

protected void btnDoSomething_Click(object sender, EventArgs e)
        {
            //do whatever you need to on the aspx page
        }

现在您可以从任何您喜欢的ascx页面调用该javascript函数。

e.g。 ascx页面:

<button type="button" onclick="doSomething()">do something on your aspx page<button/>