【问题标题】:Calling an ASPX method from an ASCX control从 ASCX 控件调用 ASPX 方法
【发布时间】:2011-10-31 22:08:42
【问题描述】:

我在 home.aspx 上有一个从 ASCX 控件调用的方法 HasAdminRole()。 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 上的单个方法时,我该如何解决此问题

【问题讨论】:

  • 将方法移动到控件中?或者创建一个所有页面派生自该控件然后可以期望找到的基 Page 类?
  • 这适用于方法。但是,我还必须访问 aspx 上的按钮事件。如果用户决定转到不同的页面,我会在 ascx 中调用该页面上的 button_click 方法。 if (Menu1.SelectedValue == "showestimateportfolio") ((Home)this.Page).btnEstPortfolio_Click(sender, e);这在我在 Home.aspx 上时有效,但在任何其他 aspx 页面上时出现转换错误。

标签: asp.net


【解决方案1】:

建议将您的 admin/roles 逻辑从 .aspx 中移出并移到可从 .aspx 和 .ascx 访问的类中。这有点“关注点分离”,并且在公共区域拥有逻辑时有点整洁。基本上——只在你的页面代码隐藏中保留页面相关的逻辑。

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

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

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

【讨论】:

  • 这适用于方法。但是,我还必须访问 aspx 上的按钮事件。如果用户决定转到不同的页面,我会从 ascx 中调用该页面上的 button_click 方法。 if (Menu1.SelectedValue == "showestimateportfolio") ((Home)this.Page).btnEstPortfolio_Click(sender, e);这在我在 Home.aspx 上时有效,但在任何其他 aspx 页面上时我得到转换错误
【解决方案2】:

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

您可以在 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/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    相关资源
    最近更新 更多