Ik ben bezig met het bouwen van een ASP.NET interface met Visual Studio 2003 in C# en het .NET framwork 1.1. Vanwege de flexibiliteit van mijn interfaces ben ik programmatig (@ runtime) mijn WebControls en Validators aan het toevoegen aan de pagina.
Nu gaat er ergens iets fout, en het moet iets stoms zijn, of misschien mis ik een basisprincipe van ASP.NET, maar ik tuur me suf en kom er niet uit. Wie kan mij uit deze uitzichtloze situatie manoeuvreren?
Ik heb mijn probleem teruggebracht naar een 'simpel' voorbeeld waarbij het nog steeds fout gaat. Hieronder heb ik de code toegevoegd, maar ik leg eerst uit wat ik doe en daarna wat er fout gaat.
Wat doe ik? Ik creëer twee TextBox elementen (Firstname en Lastname) en twee RequiredFieldValidator elementen, ieder gekoppeld aan een van de TextBoxen.
Wat gaat er fout? Zodra ik in de ID properties van de Validators niks of een -niet- numerieke waarde invul (zoals "v1 of "val1"), dan geven de Validators altijd een waarschuwing in mijn HTML pagina in de browser (IE6). m.a.w. Javascript werkt wél, maar ook als ik de velden invoer krijg ik de mededeling dat de velden leeg zijn en ik kan mijn pagina nooit meer terug-posten naar de server.
Als ik echtere een -wel- numerieke waarden in de ID properties invul (zoals "3" of "4") dan wordt het clientside controle deel overgeslagen en de pagina ALTIJD gepost naar de server. Vervolgens krijg ik de pagina terug een mededeling als ik een veld ben vergeten in te vullen. Met andere woorden, de controle loopt correct, maar er is geen clientsite controle meer wat er voor zorgt dat er onnodige round-trips naar de server gemaakt moeten worden (wat ik uiteraard wil voorkomen).
Wat ik (natuurlijk) wil dat er gebeurd is dat er zoveel mogelijk clientside controle gebeurd en dat dit correct gaat. Het bestuderen van de help in VS2003, op MSDN en een speurtocht via google en discussiegroepen leverde me echter geen nieuwe informatie over de fout die ik maak. Ook het doorspitten van de WebUIValidation.js leverde niks op.
Met andere woorden: WAT DOE IK FOUT???
Dit is mijn code
WebForm2.aspx:
WebForm2.aspx.cs:
Nu gaat er ergens iets fout, en het moet iets stoms zijn, of misschien mis ik een basisprincipe van ASP.NET, maar ik tuur me suf en kom er niet uit. Wie kan mij uit deze uitzichtloze situatie manoeuvreren?
Ik heb mijn probleem teruggebracht naar een 'simpel' voorbeeld waarbij het nog steeds fout gaat. Hieronder heb ik de code toegevoegd, maar ik leg eerst uit wat ik doe en daarna wat er fout gaat.
Wat doe ik? Ik creëer twee TextBox elementen (Firstname en Lastname) en twee RequiredFieldValidator elementen, ieder gekoppeld aan een van de TextBoxen.
Wat gaat er fout? Zodra ik in de ID properties van de Validators niks of een -niet- numerieke waarde invul (zoals "v1 of "val1"), dan geven de Validators altijd een waarschuwing in mijn HTML pagina in de browser (IE6). m.a.w. Javascript werkt wél, maar ook als ik de velden invoer krijg ik de mededeling dat de velden leeg zijn en ik kan mijn pagina nooit meer terug-posten naar de server.
Als ik echtere een -wel- numerieke waarden in de ID properties invul (zoals "3" of "4") dan wordt het clientside controle deel overgeslagen en de pagina ALTIJD gepost naar de server. Vervolgens krijg ik de pagina terug een mededeling als ik een veld ben vergeten in te vullen. Met andere woorden, de controle loopt correct, maar er is geen clientsite controle meer wat er voor zorgt dat er onnodige round-trips naar de server gemaakt moeten worden (wat ik uiteraard wil voorkomen).
Wat ik (natuurlijk) wil dat er gebeurd is dat er zoveel mogelijk clientside controle gebeurd en dat dit correct gaat. Het bestuderen van de help in VS2003, op MSDN en een speurtocht via google en discussiegroepen leverde me echter geen nieuwe informatie over de fout die ik maak. Ook het doorspitten van de WebUIValidation.js leverde niks op.
Met andere woorden: WAT DOE IK FOUT???
Dit is mijn code
WebForm2.aspx:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <%@ Page language="c#" Codebehind="WebForm2.aspx.cs" AutoEventWireup="false"
Inherits="WebApplication3.WebForm2" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm2</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<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" style="LINE-HEIGHT: normal; LETTER-SPACING: normal">
<form id="Form1" method="post" runat="server">
</form>
</body>
</HTML> |
WebForm2.aspx.cs:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
| namespace WebApplication3
{
public class WebForm2 : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlForm Form1;
private void BuildUserinterface() {
// Creating firstname textbox
TextBox Firstname = new TextBox();
Firstname.ID = "1";
Form1.Controls.Add( Firstname );
// Creating a required field for the firstname checkbox
RequiredFieldValidator val1 = new RequiredFieldValidator();
val1.ControlToValidate = Firstname.ID;
val1.Text = "Firstname is required";
val1.ID = "2v"; // val1.ID = "2";
Form1.Controls.Add( val1 );
// Adding a <br> element for layout
Literal nextline = new Literal(); nextline.Text = "<BR>";
Form1.Controls.Add( nextline );
// Creating lastname textbox
TextBox Lastname = new TextBox();
Lastname.ID = "3";
Form1.Controls.Add( Lastname );
// Creating a required field for the lastname checkbox
RequiredFieldValidator val2 = new RequiredFieldValidator();
val2.ControlToValidate = Lastname.ID;
val2.Text = "Lastname is required";
val2.ID = "4v"; // val2.ID = "4";
Form1.Controls.Add( val2 );
// Adding a sumbit button
Button button = new Button();
button.Text = "submit";
Form1.Controls.Add(button);
}
private void Page_Load(object sender, System.EventArgs e)
{
if ( IsPostBack ) {
this.Validate();
if ( this.IsValid ) {
//SaveChanges();
Response.Write( "<SCRIPT>alert('okay.');</SCRIPT>" );
} else {
Response.Write( "<SCRIPT>alert('Not okay!');</SCRIPT>" );
}
}
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
BuildUserinterface();
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
} |