Usercontrol in UpdatePanel -> externes JS mit einbinden

02/04/2008 - 12:39 von Jens Bottenschein | Report spam
Hallo NG,

bin relativ neu im Bereich ASP.NET. In unserer Firma wurde vorher in ASP
Classic (VBScript) entwickelt und alle neuen Projekte basieren nun auf .NET
/ C#.

Ich stehe gerade vor folgendem Problem und hoffe, dass mir jemand helfen
kann:
ich habe eine Page mit mehreren Updatepanels, in die jeweils verschiedene
Usercontrols geladen werden (per "LoadControl()"), die wiederum andere
UpdatePanels enthalten. In einem dieser UpdatePanels innerhalb eines
UserControls wird ein CustomValidator verwendet, für den eine
"ClientValidationFunction" hinterlegt ist. Das JavaScript zu dieser Funktion
liegt in einer externen Datei.
In mehreren Tutorials im Netz habe ich gelesen, dass das JS beim "PreRender"
des UserControls mit angehàngt werden muss, damit es der ScriptManager auf
der Container-Page kennt:

protected override void OnPreRender(EventArgs e)
{
Page.ClientScript.RegisterClientScriptInclude("My",
ResolveClientUrl("~/ClientScripts/validation.js"));
base.OnPreRender(e);
}

Wenn ich nun in das Textfeld, an dem der CustomValidator hàngt, etwas
eingebe, wird versucht die ClientValidationFunction aufzurufen ("validMe").
Firebug meldet mir aber, dass die Funktion nicht definiert wurde - der
Browser kennt Sie also nicht. Was mache ich falsch? Registriere ich das
JavaScript an der falschen Stelle? Bin sowas von ratlos

Hier nochmal die komplette Umgebung:

default.aspx:
-
..
<asp:ScriptManager ID="ScriptManager1" runat="server"
EnablePageMethods="True"
EnableScriptGlobalization="True"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>

</ContentTemplate>
</asp:UpdatePanel>
...

protected void Page_Load(object sender, EventArgs e)
{
UpdatePanel1.ContentTemplateContainer.Controls.Clear();
MyControl ctrl = (MyControl)LoadControl("mycontrol.ascx");
UpdatePanel1.ContentTemplateContainer.Controls.Add(ctrl);
}


MyControl.ascx:

<%@ Control Language="C#" AutoEventWireup="true"
CodeFile="mycontrol.ascx.cs" Inherits="MyControl" %>
<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit"
tagprefix="cc1" %>

<asp:UpdatePanel runat="server" ID="upKopfdaten"
UpdateMode="Conditional">
<ContentTemplate>

<tr>
<td><asp:Label ID="lblXXXXX" runat="server" Text="<%$Resources:xxxxx,
XXXXXX %>"></asp:Label>:</td>
<td><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
<td><asp:CustomValidator ID="TextBox1_Validator" runat="server"
ErrorMessage="Error Message" ControlToValidate="TextBox1"
ClientValidationFunction="validateMe" ValidateEmptyText="True">XXXXXX nicht
gefunden</asp:CustomValidator></td>
</tr>

</ContentTemplate>
</asp:UpdatePanel>

protected override void OnPreRender(EventArgs e)
{
string pfad = ResolveClientUrl("~/ClientScripts/validation.js");
this.Page.ClientScript.RegisterClientScriptInclude("My", pfad);
base.OnPreRender(e);
}


Bin für jeden Hinweis dankbar!

Grüsse
Jens
 

Lesen sie die antworten

#1 Thomas Bandt
02/04/2008 - 13:58 | Warnen spam
Jens Bottenschein schrieb:
Wenn ich nun in das Textfeld, an dem der CustomValidator hàngt, etwas
eingebe, wird versucht die ClientValidationFunction aufzurufen ("validMe").
Firebug meldet mir aber, dass die Funktion nicht definiert wurde - der
Browser kennt Sie also nicht. Was mache ich falsch? Registriere ich das
JavaScript an der falschen Stelle? Bin sowas von ratlos



*IMHO* ist das serverseitig eigentlich Jacke wie Hose,
d.h. wenn du das Script ganz normal im Head der Seite
einbindest (im Markup), sollte das ausreichen. Denn
das ServerControl (in dem Fall der CustomValidator) muss
ja nicht mit dem Script "interagieren", er muss nur den
Namen der Funktion wissen, welche dann aufgerufen wird.
Und da das clientseitig passiert, ist es eigentlich
wurscht wie du das einbindest, hauptsache es steht zum
Zeitpunkt der Ausführung zur Verfügung - und das tut es,
wenn es im Kopf geladen wird.

Gruß, Thomas [MVP ASP/ASP.NET]
http://www.69grad.de - Beratung, Entwicklung
http://www.dotnetjob.de - .NET-Stellenbörse
https://www.xing.com/net/asp.net/ - ASP.NET bei XING
http://blog.thomasbandt.de - Thomas goes .NET

Ähnliche fragen