2017-10-16 7 views
0

ASPを学習しています。イベント・クローン・ハンドラでキャスト例外

任意のアイデアをいただきました!間違った上で、

protected void jugar_Click(object sender, ImageClickEventArgs e) 
    { 
     String turno = (string)Session["Turno"]; 
     ImageButton boton = (ImageButton)sender; 
     if (turno == "1") 
     { 
      boton.ImageUrl = "C:\Users\Epyros\documents\visual studio 2015\Projects\EnTA TE TI\EnTA TE TI\Imagenes\Tic-tac-toe-cross.png"; 
      Session["Turno"] = 2; 
     } 
     else if (turno == "2") 
     { 
      boton.ImageUrl = "C:\Users\Epyros\documents\visual studio 2015\Projects\EnTA TE TI\EnTA TE TI\Imagenes\Tic-tac-toe-nought-e1461667111145.png"; 
      Session["Turno"] = 1; 
     } 
    } 

そのキャスト例外をスロー??:この問題を得た9 imagebuttonsを作り、同じハンドラでそれらを処理したいです

これらは、このハンドラを参照してくださいボタンです:

情報の不足のため申し訳ありません
<asp:Table ID="Table2" runat="server" HorizontalAlign="Center"> 
     <asp:TableRow runat="server"> 
      <asp:TableCell runat="server" Height="100" Width="100" HorizontalAlign="Center" VerticalAlign="Middle" Style="border-bottom: solid 2px red; border-right: solid 2px red"> 
       <asp:ImageButton ID="btn00" runat="server" class="imagen" ImageUrl="C:\Users\Epyros\documents\visual studio 2015\Projects\EnTA TE TI\EnTA TE TI\Imagenes\White_square.jpg" OnClick="jugar_Click"></asp:ImageButton> 
      </asp:TableCell> 
      <asp:TableCell runat="server" Height="100" Width="100" HorizontalAlign="Center" VerticalAlign="Middle" style="border-left:solid 2px red;border-bottom:solid 2px red;border-right:solid 2px red"> 
       <asp:ImageButton ID="btn01" runat="server" class="imagen" ImageUrl="C:\Users\Epyros\documents\visual studio 2015\Projects\EnTA TE TI\EnTA TE TI\Imagenes\White_square.jpg" OnClick="jugar_Click"></asp:ImageButton> 
      </asp:TableCell> 
      <asp:TableCell runat="server" Height="100" Width="100" HorizontalAlign="Center" VerticalAlign="Middle" style="border-left:solid 2px red;border-bottom:solid 2px red"> 
       <asp:ImageButton ID="btn02" runat="server" class="imagen" ImageUrl="C:\Users\Epyros\documents\visual studio 2015\Projects\EnTA TE TI\EnTA TE TI\Imagenes\White_square.jpg" OnClick="jugar_Click"></asp:ImageButton> 
      </asp:TableCell> 
     </asp:TableRow> 
     <asp:TableRow runat="server"> 
      <asp:TableCell runat="server" Height="100" Width="100" HorizontalAlign="Center" VerticalAlign="Middle" style="border-top:solid 2px red;border-bottom:solid 2px red;border-right:solid 2px red"> 
       <asp:ImageButton ID="btn10" runat="server" class="imagen" ImageUrl="C:\Users\Epyros\documents\visual studio 2015\Projects\EnTA TE TI\EnTA TE TI\Imagenes\White_square.jpg" OnClick="jugar_Click"></asp:ImageButton> 
      </asp:TableCell> 
      <asp:TableCell runat="server" Height="100" Width="100" HorizontalAlign="Center" VerticalAlign="Middle" style="border-top:solid 2px red;border-bottom:solid 2px red;border-left:solid 2px red;border-right:solid 2px red"> 
       <asp:ImageButton ID="btn11" runat="server" class="imagen" ImageUrl="C:\Users\Epyros\documents\visual studio 2015\Projects\EnTA TE TI\EnTA TE TI\Imagenes\White_square.jpg" OnClick="jugar_Click"></asp:ImageButton> 
      </asp:TableCell> 
      <asp:TableCell runat="server" Height="100" Width="100" HorizontalAlign="Center" VerticalAlign="Middle" style="border-top:solid 2px red;border-bottom:solid 2px red;border-left:solid 2px red"> 
       <asp:ImageButton ID="btn12" runat="server" class="imagen" ImageUrl="C:\Users\Epyros\documents\visual studio 2015\Projects\EnTA TE TI\EnTA TE TI\Imagenes\White_square.jpg" OnClick="jugar_Click"></asp:ImageButton> 
      </asp:TableCell> 
     </asp:TableRow> 
     <asp:TableRow runat="server"> 
      <asp:TableCell runat="server" Height="100" Width="100" HorizontalAlign="Center" VerticalAlign="Middle" style="border-top:solid 2px red;border-right:solid 2px red"> 
       <asp:ImageButton ID="btn20" runat="server" class="imagen" ImageUrl="C:\Users\Epyros\documents\visual studio 2015\Projects\EnTA TE TI\EnTA TE TI\Imagenes\White_square.jpg" OnClick="jugar_Click"></asp:ImageButton> 
      </asp:TableCell> 
      <asp:TableCell runat="server" Height="100" Width="100" HorizontalAlign="Center" VerticalAlign="Middle" style="border-top:solid 2px red;border-left:solid 2px red;border-right:solid 2px red"> 
       <asp:ImageButton ID="btn21" runat="server" class="imagen" ImageUrl="C:\Users\Epyros\documents\visual studio 2015\Projects\EnTA TE TI\EnTA TE TI\Imagenes\White_square.jpg" OnClick="jugar_Click"></asp:ImageButton> 
      </asp:TableCell> 
      <asp:TableCell runat="server" Height="100" Width="100" HorizontalAlign="Center" VerticalAlign="Middle" style="border-top:solid 2px red;border-left:solid 2px red"> 
       <asp:ImageButton ID="btn22" runat="server" class="imagen" ImageUrl="C:\Users\Epyros\documents\visual studio 2015\Projects\EnTA TE TI\EnTA TE TI\Imagenes\White_square.jpg" OnClick="jugar_Click"></asp:ImageButton> 
      </asp:TableCell> 
     </asp:TableRow> 
    </asp:Table> 

+0

ImageButton以外のClickイベントを開始するものがあります。 – Seano666

+3

またはセッション内の文字列ではないものがあります。スタックトレースや[mcve]の不足により、知るのが難しくなります。 –

+0

彼は 'Session [Turno"] 'に整数値を格納しているので、不必要に文字列にキャストしているようです。しかし、文字列と整数は暗黙的な変換を持つため、キャスト例外が発生しませんか? IIRC。 – Ratatoskr

答えて

0

おそらく、この行は、あなたの投稿をコードごとに例外をスローImageButton boton = (ImageButton)sender;初心者イム...はい場合その後、senderは間違いなくこのコードは、事前にすべきImageButtonではなく、いくつかの他のコントロールタイプ

-1
protected void jugar_Click(object sender, ImageClickEventArgs e) { 

if (sender is ImageButton) { 

    var turNo = Session["Turno"]; 

    var buttonSender = (ImageButton)sender; 

    switch (turNo) { 
    case 1: 
    buttonSender.ImageUrl = "C:\Users\Epyros\documents\visual studio 2015\Projects\EnTA TE TI\EnTA TE TI\Imagenes\Tic-tac-toe-cross.png"; 
    Session["Turno"] = 2; 
    break; 
    case 2: 
    buttonSender.ImageUrl = "C:\Users\Epyros\documents\visual studio 2015\Projects\EnTA TE TI\EnTA TE TI\Imagenes\Tic-tac-toe-nought-e1461667111145.png"; 
    Session["Turno"] = 1; 
    break; 
    default: 
    // Logic for turNo != 1 or 2 
    break; 
    } 
} 
else 
{ 
    // sender is not the expected type (ImageButton) 
    Trace.WriteLine(string.Format("Sender is an unexpected type. Expected: (ImageButton), got ({0}).", sender.GetType().Name),"WARN"); 
} 
} 

ではありませんキャストの例外にぶつからないようにするだけでなく、送信者の種類を通知します。

+0

'sender'がImageButtonでない場合はどうなりますか?キャストの例外は、このコードでnull ref例外になります。 – mxmissile

+0

代わりに、OPは* actual *型の情報なしで 'NullReferenceException'を得ることができます。そして、世界が期待通りでないときから実行時間が遅れます。 https://codeblog.jonskeet.uk/2013/09/19/casting-vs-quot-as-quot-embracing-exceptions/ –

+0

送信者がImageButtonでない場合、ifの条件はfalseになります。コードブロックを実行しないでください。 – Ratatoskr