dynamically add controls and validators - always false

  • Thread starter Thread starter Christian H
  • Start date Start date
C

Christian H

Based on the content in my database, I need to populate different form
controls and validators, such as textbox, dropdownlist,
requiredfieldvalidators , etc.

Then I need to check if the form has been filled out correctly. If so, I
need to update a database, and do other things.

In order to check if the form is ok, I've tried looping through the
validator controls, and I've also tried using page.isvalid.

Nomatter what, the form seems to be incorrrectly filled out. The validator
controls comes out as "false", and Page.isvalid also comes out as false.


Regards C.H




Here is a modified example of my problem, so that you can see what I'm
dealing with.

<%@ Page language="c#" Codebehind="testfil1.aspx.cs" AutoEventWireup="false"
Inherits="smbuClass.testfil1" Trace=true enableViewState=false %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>testfil1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form runat="server" ID="Form1" method="post" action="testfil1.aspx">
<asp:placeholder id="plh" runat="server" />
<asp:button Text="Click" runat="server" CausesValidation="true"
ID="Button" />
</form>
</body>
</HTML>

using System;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;

namespace smbuClass
{
public class testfil1 : System.Web.UI.Page
{

protected RequiredFieldValidator validator2 = new
RequiredFieldValidator();
protected TextBox txtfield=new TextBox();
protected System.Web.UI.WebControls.Button Button;
protected PlaceHolder plh;

private void Page_Load(Object sender,EventArgs e)
{

txtfield.ID="txtfield";
plh.Controls.Add(txtfield);

validator2.ControlToValidate=txtfield.ID+"";
validator2.ID="validator2";
validator2.Text = "Error";
validator2.ErrorMessage="Error";
validator2.EnableClientScript=false;
plh.Controls.Add(validator2);


if(Page.IsPostBack)
{
Page.Validate();
if(Page.IsValid)
Response.Write("all ok");
else
Response.Write("not ok");

foreach(BaseValidator b in Page.Validators)
{
Trace.Warn(b.IsValid + " " +b.ID + " ");
}

}





}


override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);

}

}
}
 
I go track of the error now.

Change the code like this:


protected override void CreateChildControls()

{

RequiredFieldValidator validator2 = new RequiredFieldValidator();



TextBox txtfield=new TextBox();

txtfield.ID="txtfield";

plh.Controls.Add(txtfield);



plh.Controls.Add(validator2);

validator2.ControlToValidate=txtfield.ID;

validator2.ID="validator2";

validator2.Text = "Error";

validator2.ErrorMessage="Error";

validator2.EnableClientScript=false;

}



Just add this overridden CreateChildControls to the Page and remove the
relevant code from Page_Load. That should do it. (Page.Validate etc can
still be where they are now)

--
Teemu Keiski
MCP, Designer/Developer
Mansoft tietotekniikka Oy
http://www.mansoft.fi

AspInsiders Member, www.aspinsiders.com
ASP.NET Forums Moderator, www.asp.net
AspAlliance Columnist, www.aspalliance.com
 
Thank you!

I need some advice on what to read in order to learn more about these
things.
Why did I need to override that method, and how will I know when I will need
to override a method next time...?

I've got a feeling I'm going to need to override methods a lot with this
project
Do you have an book suggestion, or online tutorials that will educate me on
this?

Regards Christian H.
 
Back
Top