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"> <a href ="#" onclick="AddAttachment(<%# BuildOpenAttachmentUrl()%>)">A</a> <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> </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
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
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
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
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.
Hallo blackman1983
Wie schon geschrieben würde ich nur Datenbindungs- oder Lokalisierungscode in die Oberfläche einprogrammieren.
Microsoft selber sieht das leider (in den Beispielen) nicht so eng.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011