Laden...

[gelöst] Zugriff auf Codebehind schlägt fehl

Erstellt von HeinzTomato vor 15 Jahren Letzter Beitrag vor 15 Jahren 776 Views
HeinzTomato Themenstarter:in
345 Beiträge seit 2005
vor 15 Jahren
[gelöst] Zugriff auf Codebehind schlägt fehl

Hallo.

Vorweg erstmal: Ich bin im ASP-Bereich noch relativ "frisch", also kann es durchaus sein, dass ich extrem dumme Fehler mache 😉

Mein Problem ist, dass eine Methode im Codebehind nicht ausgeführt wird.

Die ASPX sieht (in Teilen) wie folgt aus:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DetailEmail.aspx.cs" Inherits="waPMHI.dlg.DetailEmail" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>E-Mail</title>
    <meta http-equiv="Content-type" content="application/xhtml+xml; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="../Styles/pmhi.css" />
 <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">    
    <script language="javascript" type="text/javascript">

  
        function AddAttachment(paras) {
            alert(paras);
        }

       
    </script>
    </telerik:RadCodeBlock>
</head>
<body>
   
    <form id="wrapper" runat="server" 
    style="height: 100%; width: 100%; "  >
    [... Viele Controls ...]
 <table width="100%" style="background-color:#b2bbd8" >
	   
	   <tr><td width="70">&nbsp;<a href ="#" onclick="AddAttachment(<%# BuildOpenAttachmentUrl()%>)">A</a>   &nbsp;<asp:Label ID="Label1" runat="server" Font-Size="10" Font-Bold="true" ForeColor="#f9ffff" Text="<%$Resources:TextResources, ID_MAIL_ATTACHMENTS%>"></asp:Label></td><td id="Td1" runat="server"></td><td>&nbsp;</td></tr>
	     </table>
    </form>
</body>
</html>

Der "magische" Part ist

<a href ="#" onclick="AddAttachment(<%# BuildOpenAttachmentUrl()%>)">A</a> 

Im Codebehind gibt es auch eine entsprechende Methode:

 public string  BuildOpenAttachmentUrl()
        {
            return "'OINK'";           
        }

Die Methode wird aber nie aufgerufen. Im Debugmodus springt er nicht hinein und im HTML-Quelltext wird aus "AddAttachment(<%# BuildOpenAttachmentUrl()%>)" ein "AddAttachment()"

In irgendeiner Form wird allerdings schon überprüft, ob zumindest die Methode existiert. Wenn ich Beispielsweise die Methode umbenenne, den Aufruf in der ASPX jedoch nicht, wird eine Exception geschmissen.

Muss ich noch irgendwas magisches in die ASPX-Datei oder die Klasse schreiben, damit es funktioniert?

Mein Haus, mein Viertel, mein Blog

5.941 Beiträge seit 2005
vor 15 Jahren

Hallo HeinzTomato

Im Moment nutzt du den clientseitigen Event, siehe:

Wenn du noch ein runat="server" Attribut ranmachst oder ein <asp:HyperLink ... Control nimmst, klappts auch mit der Serverseite.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

HeinzTomato Themenstarter:in
345 Beiträge seit 2005
vor 15 Jahren

Danke, aber der Fehler war ein andrer:

Anstatt

<%# BuildOpenAttachmentUrl()%>

hätte ich

<%= BuildOpenAttachmentUrl()%>

Nehmen müssen. Das kommt davon, wenn man ein Beispiel aus einem Datagrid für einen Link umschreiben will 😃

Mein Haus, mein Viertel, mein Blog

5.941 Beiträge seit 2005
vor 15 Jahren

Hallo HeinzTomato

Okay klar.
Ich würde das aber im Codebehind machen und überhaupt keine Codetags in der Deklaration verwenden, ausser für die Lokalisierung oder das Datebinden.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

B
114 Beiträge seit 2007
vor 15 Jahren

Ich weiß nicht wie das von MS empfohlen wird bzw wie das vlt ein sehr erfahrener Entwickler macht, aber ich verwende prinzipiell 0,0 Server-Code in den aspx-Seiten selbst. Die aspx seh ich "lediglich" als Design-Ebene. Also wie sollen meine Elemente wo dargestellt werden. Inhalt und Funktion ist für mich grundsätzlich Codebehind.

5.941 Beiträge seit 2005
vor 15 Jahren

Hallo blackman1983

Wie schon geschrieben würde ich nur Datenbindungs- oder Lokalisierungscode in die Oberfläche einprogrammieren.

  1. Wäre es schlechter Stil
  2. Leidet die Übersichtlichkeit
  3. Gibt es Features die nicht laufen, wenn man Code in der Dekleration hat

Microsoft selber sieht das leider (in den Beispielen) nicht so eng.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011