2017-08-22 10 views
0

エラーを入力して 'System.Web.UI.WebControls.Button' タイプのオブジェクトをキャストすることができません:'System.Web.UI.WebControls.DropDownList'

Unable to cast object of type 'System.Web.UI.WebControls.Button' to type 'System.Web.UI.WebControls.DropDownList'

はなぜ?

<EditFormSettings EditFormType="Template"> 
    <FormTemplate> 
    <asp:Label ID="Assign_t" runat="server" Font-Bold="True" ForeColor="#3366CC">Assign</asp:Label> 

    <telerik:RadDropDownList ID="dd_Assign" runat="server" RenderMode="Lightweight" Skin="Bootstrap" SelectedValue='<%#Bind("Assign_to") %>'> 
      <Items> 
       <telerik:DropDownListItem runat="server" Text="No Assign" Value="0" /> 
       <telerik:DropDownListItem runat="server" Text="name1" Value="[email protected]" /> 
       <telerik:DropDownListItem runat="server" Text="name2" Value="[email protected]" /> 
      </Items> 
    </telerik:RadDropDownList> 

    <asp:Button ID="btnUpdate" Text='<%# IIf((TypeOf (Container) Is GridEditFormInsertItem), "Insert", "Update") %>' OnClick = "SendMail" 
             runat="server" CommandName='<%# IIf((TypeOf (Container) Is GridEditFormInsertItem), "PerformInsert", "Update")%>' ></asp:Button> 
    <asp:Button ID="btnCancel" Text="Cancel" runat="server" CausesValidation="False" 
              CommandName="Cancel"></asp:Button> 
    </FormTemplate> 
</EditFormSettings> 
Protected Sub SendMail(ByVal sender As Object, ByVal e As EventArgs) 

    Dim ddlSection As DropDownList = DirectCast(sender, DropDownList) 
    Dim editItem As GridEditFormItem = DirectCast(ddlSection.NamingContainer, GridEditFormItem) 
    Dim dd_Assign As DropDownList = DirectCast(editItem.FindControl("dd_Assign"), DropDownList) 

    Dim strFrom As String = "[email protected]" 
    Dim strCC As String = dd_Assign.SelectedItem.ToString 
    Dim strBCC As String = "[email protected]" 'BCC 
    Dim strSubject As String = "Request JOB Verification Approval" 
    Dim strBody As String = "test" 
    Dim mailMessage As New System.Net.Mail.MailMessage(strFrom, strCC, strSubject, strBody) 
    Dim mailClient As New System.Net.Mail.SmtpClient("xx.xx.xx.xx", 25) 
    mailClient.Credentials = New System.Net.NetworkCredential("[email protected]", "pass") 
    mailClient.DeliveryMethod = Net.Mail.SmtpDeliveryMethod.Network 
    mailClient.UseDefaultCredentials = True 
    mailClient.Send(mailMessage) 

End Sub 
+0

'sender'パラメータは、イベントを発生させたオブジェクトです。明らかに 'Button'の' Click'イベントを処理しているので、なぜ 'sender'が他のものになるのでしょうか? – jmcilhinney

答えて

2

エラーメッセージは非常に簡単です:DropDownListButton制御をキャストしようとする試みは、&がInvalidCastExceptionを投げが発生しました。

ボタンコントロールの一つはSendMailメソッドにバインドされたOnClickイベントハンドラました:

<asp:Button ID="btnUpdate" Text='<%# IIf((TypeOf (Container) Is GridEditFormInsertItem), "Insert", "Update") %>' 
      OnClick="SendMail" 
      runat="server" CommandName='<%# IIf((TypeOf (Container) Is GridEditFormInsertItem), "PerformInsert", "Update")%>'> 
</asp:Button> 

しかしSendMailメソッド内では、DropDownListにキャストしようと存在しています

' first cast 
Dim ddlSection As DropDownList = DirectCast(sender, DropDownList) 

' second cast 
Dim dd_Assign As DropDownList = DirectCast(editItem.FindControl("dd_Assign"), DropDownList) 

sender argument contains control object that the event action is bound forこと、イベントハンドラを適切な制御にバインドする必要があります。あなたはそれを証明するためにButtonにキャストしてみてください:

Dim button As Button = DirectCast(sender, Button) 

EditFormSettingsのでTemplate編集モードを使用したと、私はあなたがここにRadGridを使用していると思うので、与えられたとして、あなたの代わりに、標準のボタンのイベントハンドラのItemUpdatedイベントを利用することができますthis exampleにあります。

Protected Sub RadGrid1_ItemUpdated(ByVal source As Object, ByVal e As Telerik.Web.UI.GridUpdatedEventArgs) Handles RadGrid1.ItemUpdated 
    If e.Exception Is Nothing Then 
     ' email sending code here 
    Else 
     ' throw exception 
    End If 
End If 
関連する問題