Francesco Geri

Il blog di Francesco Geri
posts - 94, comments - 165, trackbacks - 2

[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 20:06 | Filed Under [ ASP.NET 2.0 ]

Powered by:
Powered By Subtext Powered By ASP.NET