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

时间:2013-06-26 18:52:26

标签: asp.net event-handling master-pages

我有一个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....

我可以通过向内容页面添加打印按钮来解决问题,但这会破坏使用母版页的目的。

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

1 个答案:

答案 0 :(得分:0)

不应该将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的命名空间。