我在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上调用单个方法时解决此问题
答案 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/>