从两个不同的母版页访问事件处理程序



我有一个ASP.NET内容页,其中的主页面是动态设置的。两个母版页都包含一个打印按钮和该按钮的单击事件的关联事件处理程序。不幸的是,当我试图从最初未分配的母版页动态访问事件时,我收到了一个运行时错误。

以下是代码片段:

    <%@ Page Language="VB" MasterPageFile="~/Evaluators/masEvaluators.master" AutoEventWireup="false"
      CodeFile="EDF_Instructions.aspx.vb" Inherits="Evaluators_EDF_Instructions" Title="EDF - Instructions" %>

    Page_Load():
      Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim strPageTitle As String = "Evaluator Data Form - Instructions"
        If Page.MasterPageFile.Contains("masEvaluators.master") Then
          Dim mp As Evaluators_masEvaluators = CType(Me.Master, Evaluators_masEvaluators)
          AddHandler mp.SaveEDF, AddressOf imgbtnPrint_Click
        ElseIf Page.MasterPageFile.Contains("masStaff.master") Then
          Dim mp As Evaluators_masEvaluators = CType(Me.Master, Evaluators_masEvaluators)
          CType(Page.Master.FindControl("imgbtnPrint"), ImageButton).Visible = True
          AddHandler mp.SaveEDF, AddressOf imgbtnPrint_Click
        End If  

当我加载页面并引用"masStaff.master"主页面时,会产生以下错误:

System.InvalidCastException: Unable to cast object of type 'ASP.staff_masstaff_master' to type 'Evaluators_masEvaluators'. at Evaluators_EDF_Instructions.Page_Load....

我可以通过在内容页上添加打印按钮来解决这个问题,但这与使用母版页的目的背道而驰。

这个问题有解决办法吗?我花了很多时间在网上研究这个问题,但还没有找到解决方案。

您不应该将ElseIf中的母版页强制转换为类似staff_masstaff_master 的内容吗

就像这样:

If Page.MasterPageFile.Contains("masEvaluators.master") Then
  Dim mp As Evaluators_masEvaluators = CType(Me.Master, Evaluators_masEvaluators)
  AddHandler mp.SaveEDF, AddressOf imgbtnPrint_Click
ElseIf Page.MasterPageFile.Contains("masStaff.master") Then
  Dim mp As **Staff_masStaff** = CType(Me.Master, **Staff_masStaff**)
    CType(Page.Master.FindControl("imgbtnPrint"), ImageButton).Visible = True
  AddHandler mp.SaveEDF, AddressOf imgbtnPrint_Click
End If 

您还可以导入定义Staff_masStaff的命名空间。

最新更新