我在home.aspx上有一个从ASCX控件调用的方法HasAdminRole()。ASCX使用(主页)this.Page).HasAdminRole()和home.aspx上的用户控件工作
现在,当我将相同的ASCX添加到不同的ASPX页面Adminuser.aspx时,当ASCX试图从不同的ASPX页面调用(主页)this.Page).HasAdminRole()时,而不是在home.aspx上时,我得到一个错误
我得到错误: Unable to cast object of type 'ASP.adminuser_aspx‘to type 'CALE.Home’。
当在多个ASPX上使用相同的ASCX,并且用户控件尝试在Home.aspx上调用单个方法时,如何解决此问题?
发布于 2011-11-01 06:11:17
建议将管理员/角色逻辑从.aspx中移出,放入可以从.aspx和.ascx访问的类中。这有点“关注点分离”,在公共领域有一些整洁的逻辑。基本上--只在页面代码隐藏中保留与页面相关的逻辑。
public static class Roles
{
public static HasAdminRole(User someUser)
{
// implementation
}
}
从任何页面的代码隐藏或其他帮助器类调用它:
User foo;
bool isAdmin = Roles.HasAdminRole(foo);
发布于 2018-06-04 20:37:48
所以我想出了一个解决这个问题的办法。
您可以在aspx页面中创建客户端触发器,并在ascx页面中使用javascript调用它。
例如:
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函数。
例如ascx页面:
<button type="button" onclick="doSomething()">do something on your aspx page<button/>
https://stackoverflow.com/questions/7960353
复制相似问题