Francesco Geri

Il blog di Francesco Geri
posts - 56, comments - 57, trackbacks - 2

My Links

News



Anch'io metto nel mio blog cose che scrivo così, tanto per fare, tanto per condividere miei appunti, senza prendermi la briga di garantirne l'infallibilità, né l'assoluta correttezza, senza pretese e con grande umilté.

Quanti mi hanno visto dal 25/10/2007:
...dettagli

Che libro leggo in questo periodo?*

L'Affittacamere - Valerio Varesi
* L'immagine è presa da IBS (http://www.ibs.it), spero non me ne vogliano...

Archives

Post Categories

Altre

Blogs

[ASP.NET 2.0] Master Page e l'ID del form perduto!

Migrando in ASP.NET 2.0 una mia appicazione fatta in ASP.NET 1.1 mi sono imbattuto in una situazione un po' spiacevole...

Se una webform ASP.NET 2.0 ha una master page con un certo form quando viene renderizzata quel form avrà come ID la costante "aspnetForm"!

Anche eventuali controlli client messi la dentro avranno un nuovissimo ID. Vediamo un esempio.

Facciamo un'applicazione con una master page così:

<%@ Master Language="VB" AutoEventWireup="false"
CodeBehind="MyMaster.master.vb" Inherits="WebApplication1.MyMaster" %>

<html>
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="myFormID" runat="server">
    <div>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

ed un web form così:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="MyWebForm.aspx.vb" Inherits="WebApplication1.MyWebForm"  MasterPageFile="~/MyMaster.Master"%>

<asp:Content ContentPlaceHolderID=ContentPlaceHolder1 ID="myPHID" runat=server>
<input type=file id="myInputID" runat=server />
</asp:Content>

Proviamo a mandarlo in esecuzione et voilà cosa ci restituisce il browser:

<html>
<head><title>
 Untitled Page
</title></head>
<body>
    <form name="aspnetForm" method="post" action="MyWebForm.aspx" id="aspnetForm" enctype="multipart/form-data">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="...#@qualcosa!..." />
</div>
    <div>
<input name="ctl00$ContentPlaceHolder1$myInputID" type="file" id="ctl00_ContentPlaceHolder1_myInputID" />
    </div>
    </form>
</body>
</html>

In rosso sono evidenziati i nuovi ID!
La mia domanda è: perché? Come mai c'è stata l'esigenza di fare questo? Che male c'era a lasciare l'ID messo all'inizio dal programmatore (o direttamente da visual studio!)?

Il problema nella mia applicazione è che la mia pagina ha degli script javascript che dovrebbero accedere a quegli oggetti, e lo fanno sfruttando quegli ID che purtroppo sono andati persi!
Beh, un altro modo per fare gli script lo si trova, ok, ma il preché di questo comportamento non lo capisco proprio!!

Ciao!

Print | posted on mercoledì 15 novembre 2006 18.06 | Filed Under [ ASP.NET 2.0 ]

Feedback

Gravatar

# re: [ASP.NET 2.0] Master Page e l'ID del form perduto!

E' il meccanismo che utilizza ASP.NET per assegnare nomi univoci ai controlli presenti nelle pagine. Attraverso l'interfaccia INamingContainer ai controlli figlio di un controllo che implementa quella interfaccia viene assegnanto un id che contiene anche quello del padre. Per ottenere l'id a livello client di un qualsiasi controllo senza rischiare di sbagliare devi utilizzare la proprietà ClientID esposta dalla classe System.Web.UI.Control.
16/11/2006 2.07 | Simone Busoli
Gravatar

# re: [ASP.NET 2.0] Master Page e l'ID del form perduto!

Si, è veramente un comportamento odioso. Cmq puoi ovviare con: document.forms[0]

05/03/2007 11.23 | Alessio Fiore

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 6 and 4 and type the answer here:

Powered by: