HAVIT Knowledge Base

Vývoj webových aplikací, .NET, SQL, návrh
Welcome to HAVIT Knowledge Base Sign in | Join | Help
-
Home Články Forums Obrázky Soubory

ASP.NET

Vývoj webových aplikací ASP.NET

<form defaultfocus=".." defaultbutton="..." runat="server"> při použití MasterPage

Občas jsme donuceni umístit control <form runat="server"> už do MasterPage, například proto, že máme v MasterPage navigační TreeView či jiný control vyžadující <form>. Pak nastává otázka, jak ve vlastní content-page nastavit formuláři vlastnosti DefaultButton a DefaultFocus na tam umístěné controly.

<%@ Master ... %>
...
<body>
<form id="MainForm" runat="server">
...
<asp:ContentPlaceHolder ID="BodyCPH" runat="server" />
...
</form>
</body>
...

Content-page s controly:

<%@ Page MasterPageFile="..." ... %>
<asp:Content ContentPlaceHolderID="BodyCPH" runat="server">
<asp:TextBox ID="UsernameTB" runat="server" />
<asp:LinkButton ID="LoginLB" runat="server" />
</asp:Content>

Mnohé správně napadne, že Page má property Form, přes kterou to jistě půjde nastavit. Ano, nicméně properties DefaultFocus a DefaultButton jsou typu string a pokud zkusíme například

Page.Form.DefaultButton = "LoginLB";  // špatně !!!
Page.Form.DefaultButton = LoginLB.ID; // špatně !!!

...pak budeme odměněni výjimkou InvalidOperationException: The DefaultButton of 'MainForm' must be the ID of a control of type IButtonControl.

Správně je v případě DefaultButton potřeba předat UniqueID a v případě DefaultFocus ClientID daného controlu, protože je potřeba ho identifikovat včetně NamingContaineru (form a button jsou každý v jiném naming containeru)

Page.Form.DefaultButton = LoginLB.UniqueID;
Page.Form.DefaultFocus = UsernameTB.ClientID;
Stejným způsobem bychom postupovali nejenom v případě MasterPage, ale například i v případě, kdy bychom chtěli vlastnosti DefaultButton či DefaultFocus ovlivnit z nějakého controlu (což bych spíše nedoporučoval).
Published 28. září 2006 12:08 by Robert Haken

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

 

Mifko said:

Ahoj. Tak toto si v mojom pripade casovo trafil kliniec po hlavicke. Presne vcera ma totiz napadlo, ze by som chcel nastavit niektore tlacidlo ako defaultne a reku ze dnes skusim pohladat ako na to. No a usetril si mi kusok prace. Mne by sice asi doplo, ze treba pouzit UniqueId, ale tym ze je to prvy projekt kde default tlacidlo potrebujem pouzit, tak by som musel hladat ako a kde sa nastavuje. Uz nemusim ;) Dik, Mifko
září 28, 2006 15:31
 

arthur said:

Dík, záchrana v pravou chvíli. (-:

října 12, 2007 13:24
 

ernest said:

od .NET 2.0 ma System.Web.UI.WebControls.Panel atribut DefaultButton

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.panel.defaultbutton(VS.80).aspx

června 2, 2009 10:26
 

shifu said:

super! díky.

června 24, 2009 11:17

What do you think?

(required) 
(optional)
(required) 
Enter the code you see below

Submit