Thanks for the followup Lee,
Yes, manually clear all the entry fields controls may cause the page code
become tight-coupled, but it'll be the most efficient way. Also, if you
want to make it more flexible, we can use the FindControl method to find
all the enty fields controls thorugh the control ID and reset their text
property, but this will be much less efficient.
Thanks,
Steven Cheng
Microsoft Online Support
Get Secure!
www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
rights.)
--------------------
| Thread-Topic: How to perform server-side form reset?
| thread-index: AcWpW6aq6sDuDiD +SgiDrP/xnnn3Lw==
| X-WBNR-Posting-Host: 194.200.242.250
| From: "=?Utf-8?B?TGVlIENoYXB tYW4=?=" <Le********@new sgroup.nospam>
| References: <B8************ *************** *******@microso ft.com>
<#J************ **@TK2MSFTNGP10 .phx.gbl>
<KE************ **@TK2MSFTNGXA0 1.phx.gbl>
| Subject: Re: How to perform server-side form reset?
| Date: Thu, 25 Aug 2005 02:59:15 -0700
| Lines: 253
| Message-ID: <2F************ *************** *******@microso ft.com>
| MIME-Version: 1.0
| Content-Type: text/plain;
| charset="Utf-8"
| Content-Transfer-Encoding: 7bit
| X-Newsreader: Microsoft CDO for Windows 2000
| Content-Class: urn:content-classes:message
| Importance: normal
| Priority: normal
| X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.0
| Newsgroups: microsoft.publi c.dotnet.framew ork.aspnet
| NNTP-Posting-Host: TK2MSFTNGXA03.p hx.gbl 10.40.2.250
| Path: TK2MSFTNGXA01.p hx.gbl!TK2MSFTN GXA03.phx.gbl
| Xref: TK2MSFTNGXA01.p hx.gbl
microsoft.publi c.dotnet.framew ork.aspnet:1202 05
| X-Tomcat-NG: microsoft.publi c.dotnet.framew ork.aspnet
|
|
| Hi,
|
| I see. The examples in ASP.NET Developing Server Controls & Components
| implement properties that persist via view state in the following way:
|
| public string Action
| {
| get
| {
| string action = (string)(ViewSt ate["Action"]);
| return action == null ? String.Empty : action;
| }
| set
| {
| ViewState["Action"] = value;
| }
| }
|
| So I assumed that I would be able to reset the state that a control
persists
| via view state by clearing view state, even in a click event (which I
| understand fires after view state has been restored).
|
| However, I guess most controls must do things differently; perhaps they
do
| something like:
|
| private string action;
|
| public string Action
| {
| get { return this.action; }
| set { this.action = value; }
| }
|
| protected override object SaveViewState()
| {
| return this.action;
| }
|
| protected override void LoadViewState(o bject savedState)
| {
| this.action = (string)savedSt ate;
| }
|
| Which would explain what's going on.
|
| So going back to my original problem, it looks like I will have to reset
my
| form manually, as you suggest, by resetting the object properties that I
care
| about. That's more code - and code that has to remain in sync with the
| controls on the page - but if there's no "reset my controls" silver
bullet,
| then I guess I have no choice.
|
| Thanks,
| - Lee
|
|
| "Steven Cheng[MSFT]" wrote:
|
| > Thanks for Bruce's informative inputs,
| >
| > Hi Lee,
| >
| > As Bruce has mentioned, the LoadViewState is getting executed before
Load
| > event for controls/page , after that the propertes value is assigned to
the
| > Control/page instance, and these properteis will be persisted into
| > viewstate again before Rendering. So change the ViewState in PostBack
event
| > handler ( After Load ViewSate before save viewstate) won't have any
effect.
| > also, IMO, I'd recommend you directly clear those entry fields
control's
| > content through the instance properties rather than accessing the
ViewState
| > collection.
| >
| > Thanks,
| >
| > Steven Cheng
| > Microsoft Online Support
| >
| > Get Secure!
www.microsoft.com/security
| > (This posting is provided "AS IS", with no warranties, and confers no
| > rights.)
| > --------------------
| > | From: "Bruce Barker" <br************ ******@safeco.c om>
| > | References: <B8************ *************** *******@microso ft.com>
| > | Subject: Re: How to perform server-side form reset?
| > | Date: Wed, 24 Aug 2005 09:01:14 -0700
| > | Lines: 148
| > | X-Priority: 3
| > | X-MSMail-Priority: Normal
| > | X-Newsreader: Microsoft Outlook Express 6.00.2900.2180
| > | X-RFC2646: Format=Flowed; Original
| > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
| > | Message-ID: <#J************ **@TK2MSFTNGP10 .phx.gbl>
| > | Newsgroups: microsoft.publi c.dotnet.framew ork.aspnet
| > | NNTP-Posting-Host: rdcsd1.safeco.c om 12.144.134.2
| > | Path: TK2MSFTNGXA01.p hx.gbl!TK2MSFTN GP08.phx.gbl!TK 2MSFTNGP10.phx. gbl
| > | Xref: TK2MSFTNGXA01.p hx.gbl
| > microsoft.publi c.dotnet.framew ork.aspnet:1199 90
| > | X-Tomcat-NG: microsoft.publi c.dotnet.framew ork.aspnet
| > |
| > | because the click event fires long after the textbox has feteched its
| > value
| > | from viewstate.
| > |
| > | -- bruce (sqlwork.com)
| > |
| > |
| > | "Lee Chapman" <Le********@new sgroup.nospam> wrote in message
| > | news:B8******** *************** ***********@mic rosoft.com...
| > | >
| > | > Hi,
| > | >
| > | > Can anyone tell me why in the code below, the call to
| > | > ClearChildViewS tate()
| > | > has no effect?
| > | >
| > | > To paraphrase the code: I'm using view state. I have a textbox and
a
| > | > submit
| > | > button (and a label that can be ignored). When I press the button
the
| > | > first
| > | > time, the click handler hides the textbox. Pressing the button a
second
| > | > time
| > | > unhides the textbox. The text box is maintaining its value when
hidden
| > via
| > | > view state. (The value is NOT being populated due to postback
data.) I
| > | > want a
| > | > server-side function to reset a form to it's initial state (i.e.
the
| > state
| > | > it
| > | > was in when I first browsed to it). I expected
| > Page.ClearChild ViewState()
| > | > to
| > | > do this, but it doesn't. Why not? And what can I do to reset my
form on
| > | > the
| > | > server without disabling viewstate?
| > | >
| > | > Thanks,
| > | > - Lee
| > | >
| > | > <%@ Page language="c#" Codebehind="Web Form1.aspx.cs"
| > | > AutoEventWireup ="false"
| > | > Inherits="WebTe st.WebForm1" EnableViewState ="true" %>
| > | > <%@ Register TagPrefix="My" Namespace="WebT est" Assembly="WebTe st"
%>
| > | > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
| > | > <HTML>
| > | > <HEAD>
| > | > <title>WebForm1 </title>
| > | > </HEAD>
| > | > <body >
| > | > <form id="Form1" method="post" runat="server">
| > | > <My:TextBox id="TextBox1" runat="server"
| > | > EnableViewState ="true"></My:TextBox>
| > | > <asp:Button id="Button1" runat="server" Text="Hide"></asp:Button>
| > | > <p><asp:Label id="Label1" runat="server"> </asp:Label></p>
| > | > </form>
| > | > </body>
| > | > </HTML>
| > | >
| > | > using System;
| > | > using System.Collecti ons;
| > | > using System.Componen tModel;
| > | > using System.Data;
| > | > using System.Drawing;
| > | > using System.Web;
| > | > using System.Web.Sess ionState;
| > | > using System.Web.UI;
| > | > using System.Web.UI.W ebControls;
| > | > using System.Web.UI.H tmlControls;
| > | >
| > | > namespace WebTest
| > | > {
| > | > /// <summary>
| > | > /// Summary description for WebForm1.
| > | > /// </summary>
| > | > public class WebForm1 : System.Web.UI.P age
| > | > {
| > | > protected System.Web.UI.W ebControls.Butt on Button1;
| > | > protected System.Web.UI.W ebControls.Labe l Label1;
| > | > protected System.Web.UI.W ebControls.Text Box TextBox1;
| > | >
| > | > #region Web Form Designer generated code
| > | > override protected void OnInit(EventArg s e)
| > | > {
| > | > InitializeCompo nent();
| > | > base.OnInit(e);
| > | > }
| > | >
| > | > private void InitializeCompo nent()
| > | > {
| > | > this.Button1.Cl ick += new System.EventHan dler(this.Butto n1_Click);
| > | > }
| > | > #endregion
| > | >
| > | > private void Button1_Click(o bject sender, System.EventArg s e)
| > | > {
| > | > if (!this.IsTracki ngViewState)
| > | > throw new ApplicationExce ption();
| > | >
| > | > WebTest.TextBox c = (WebTest.TextBo x)this.FindCont rol("TextBox1") ;
| > | >
| > | > System.Diagnost ics.Trace.Write Line(c.GetViewS tate().Count);
| > | > this.ClearChild ViewState(); // Why does this have no effect?
| > | > System.Diagnost ics.Trace.Write Line(c.GetViewS tate().Count);
| > | >
| > | > if (this.Button1.T ext == "Hide")
| > | > {
| > | > this.Button1.Te xt = "Show";
| > | > this.TextBox1.V isible = false;
| > | >
| > | > if (this.TextBox1. Text.Length > 0)
| > | > this.Label1.Tex t = this.TextBox1.T ext;
| > | > }
| > | > else // "Show"
| > | > {
| > | > this.Button1.Te xt = "Hide";
| > | > this.TextBox1.V isible = true;
| > | > }
| > | > }
| > | > }
| > | > }
| > | >
| > | > using System;
| > | > using System.Web.UI;
| > | >
| > | > namespace WebTest
| > | > {
| > | > public class TextBox : System.Web.UI.W ebControls.Text Box
| > | > {
| > | > protected override object SaveViewState()
| > | > {
| > | > object vs = null;
| > | >
| > | > vs = base.SaveViewSt ate ();
| > | >
| > | > return vs;
| > | > }
| > | >
| > | > protected override void LoadViewState(o bject savedState)
| > | > {
| > | > base.LoadViewSt ate (savedState);
| > | > }
| > | >
| > | > public StateBag GetViewState()
| > | > {
| > | > return this.ViewState;
| > | > }
| > | > }
| > | > }
| > | >
| > | >
| > |
| > |
| > |
| >
| >
|