AJAX: Multiple controls were found with the same id
Autor: Libor Bešenyi
Dátum: 24.5 .2009
Mal som implementovaný jeden pomerne komplikovaný User Control (Visual Studio 2008, ASPX .Net 3.5) s pár Ajax toolbox objektmi v DataGridView. Všetko chodilo, kým neprišla požiadavka, že záznamy sa nebudú editovať v gride, ale vo fieldoch pod gridom (príliš veľa záznamov, preto také rozhodnutie).
Nič jednoduchšie neexistuje, že? No bol som prekvapený, keď po „copy – paste“ v run-time som začal dostávať javascript chybu! Po dlhodobom krokovaní, som zistil, že nie je iná možnosť, ako „opraviť“ FindControl() routinu zdedenú z Form triedy.
Našťastie všetky moje formuláre dedia z predka, ktorého som napísal. Tak som začal pátrať, ako to do prdele robí Microsoft v gride a našiel som. Moja predtucha bola správa, výsledok je tu:
using System.Collections.Generic;
2
3 ...
4
5 public abstract partial class FormularZaklad : System.Web.UI.Page
6 {
7 // --------------------------------------------------------------------
8 private Dictionary<string, Control> _findControlHelperCache = new Dictionary<string, Control>();
9
10 ...
11
12 // --------------------------------------------------------------------
13 public override Control FindControl(string id)
14 {
15 Control control = null;
16 if (_findControlHelperCache.ContainsKey(id))
17 control = _findControlHelperCache[id];
18 else
19 {
20 control = base.FindControl(id);
21 Control nc = NamingContainer;
22 while ((null == control) && (null != nc))
23 {
24 control = nc.FindControl(id);
25 nc = nc.NamingContainer;
26 } // while
27 if (null != control)
28 {
29 _findControlHelperCache[id] = control;
30 } // if
31 } // else
32 return control;
33 }
http://forums.asp.net/p/1135399/3183833.aspx#3183833