0

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

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

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

4

1 回答 1

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定义的名称空间。

于 2013-06-26T19:08:40.150 回答