Client validation not working with XML data islands in tables

  • Thread starter Thread starter Dnna
  • Start date Start date
D

Dnna

I have a table which is bound to an Internet Explorer XML
data island. I'm using ASP.NET's client-side validators
for an input field in the table. The problem is that if
the input fields are in a table that is bound to the
island (such that the rows are dynamically generated by IE
from the XML data island), the validators do not work. If
the table is not bound, the validators do work, but then I
don't have the table iterating through all the elements in
my xml island.

If I hard-code a Javascript onchange event into each form
field and then write a custom javascript function, I might
be able to manually invoke the validators. But then I need
to figure out how to manually call the ASP.NET front-end
validators. I'd prefer to stick to "pure" ASP.NET
validation and have it work w/ IE XML data island bound
table if at all possible.

BTW, I realize that I could bind the XML on the server-
side using ASP.NET's data-binding methods. The advantage
to using the client-side IE XML data islands is that I can
keep all of the data in an XML format from the front-end
all the way to my XML-compatile ORacle 9i database on the
back-end, which reduces the amount and complexity of code
that needs to be written.

Any suggestions?

Here is the generated code for my table:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN"> <HTML> <HEAD>
<TITLE>Patient Visits</TITLE>
</HEAD>
<BODY>
<H1>Patient Visits</H1>
<XML ID="VisitsDSO">
<visits>
<visit>
<number>1</number>
<height>111</height>
<weight>100</weight>
<date>1999-01-01</date>
</visit>
<visit>
<number>2</number>
<height>222</height>
<weight>200</weight>
<date>2000-01-01</date>
</visit>
<visit>
<number>3</number>
<height>333</height>
<weight>300</weight>
<date>2001-01-01</date>
</visit>
<visit>
<number>4</number>
<height>444</height>
<weight>400</weight>
<date>2002-01-01</date>
</visit>
<visit>
<number>5</number>
<height>555</height>
<weight>500</weight>
<date>2003-01-01</date>
</visit>
</visits>
</xml>


<form name="_ctl0" method="post"
action="PatientVisits.aspx" language="javascript"
onsubmit="ValidatorOnSubmit();" id="_ctl0"> <input
type="hidden" name="__VIEWSTATE"
value="dDwtNDg3NzIxNjA3Ozs+LcqNO2ytHf6sg9tZGopQzt1vegQ=" />

<script language="javascript"
src="/aspnet_client/system_web/1_1_4322/WebUIValidation.js"
</script>
<TABLE datasrc="#VisitsDSO" BORDER="1">
<THEAD>
<TR>
<TH>
Visit</TH>
<TH>
Date</TH>
<TH>
Height</TH>
<TH>
Height</TH>
<TH>
Weight</TH>
</TR>
</THEAD>
<TR>
<TD VALIGN="top">
<SPAN DATAFLD="number"></SPAN>
</TD>
<TD VALIGN="top"><input name="TextBox2" id="TextBox2"
type="text" datafld="Date" />
<span id="Requiredfieldvalidator4"
controltovalidate="TextBox2" errormessage="<br>Empty
Field" display="Dynamic"
evaluationfunction="RequiredFieldValidatorEvaluateIsValid"
initialvalue="" style="color:Red;display:none;"><br>Empty
Field</span>
<span id="Comparevalidator1"
controltovalidate="TextBox2" errormessage="<br>Please
enter a whole number greater than or equal to 12345."
type="Integer"
evaluationfunction="CompareValidatorEvaluateIsValid"
valuetocompare="12345" operator="GreaterThanEqual"
style="color:Red;visibility:hidden;"><br>Please enter a
whole number greater than or equal to 12345.</span>
</td>
</TR>
</TABLE>


<script language="javascript">
<!--
var Page_Validators = new Array(document.all
["Requiredfieldvalidator1"],
document.all["Comparevalidator2"],
document.all["Requiredfieldvalidator4"],
document.all["Comparevalidator1"]);
// -->
</script>


<script language="javascript">
<!--
var Page_ValidationActive = false;
if (typeof(clientInformation) != "undefined" &&
clientInformation.appName.indexOf("Explorer") != -1) {
if (typeof(Page_ValidationVer) == "undefined")
alert("Unable to find script
library '/aspnet_client/system_web/1_1_4322/WebUIValidation
..js'. Try placing this file manually, or reinstall by
running 'aspnet_regiis -c'.");
else if (Page_ValidationVer != "125")
alert("This page uses an incorrect version of
WebUIValidation.js. The page expects version 125. The
script library is " + Page_ValidationVer + ".");
else
ValidatorOnLoad();
}

function ValidatorOnSubmit() {
if (Page_ValidationActive) {
ValidatorCommonOnSubmit();
}
}
// -->
</script>


</form>
</BODY>
</HTML>



----------------------------------------
Here is a simplified version of the aspx page:

<%@ Page Language="vb" AutoEventWireup="false"
Codebehind="PatientVisits.aspx.vb"
Inherits="App1.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
</HEAD>
<BODY>
<!--#include virtual="FormData.asp"-->
<form runat="server">

<!-- binding works here, AND
validation does also. -->
<asp:DropDownList
id="Dropdownlist1" datasrc="#VisitsDSO" datafld="Weight"
runat="server">
<asp:ListItem></asp:ListItem>
<asp:ListItem
Value="100">100</asp:ListItem>
<asp:ListItem
Value="200">200</asp:ListItem>
<asp:ListItem
Value="300">300</asp:ListItem>
<asp:ListItem
Value="400">400</asp:ListItem>
<asp:ListItem
Value="500">500</asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator
id="Requiredfieldvalidator3" runat="server"
ControlToValidate="Dropdownlist1" ErrorMessage="<br>Empty
Field"

Display="Dynamic"></asp:RequiredFieldValidator>
<br>

<TABLE BORDER="1"
datasrc="#VisitsDSO">
<THEAD>
<TR>

<TH>
Weight</TH>
</TR>
</THEAD>
<TBODY>
<TR>
<TD
VALIGN="top">
<!--
binding works here, but validation does not. -->

<asp:DropDownList id="SelectWeight"
datafld="Weight" runat="server">

<asp:ListItem></asp:ListItem>

<asp:ListItem Value=100>100</asp:ListItem>

<asp:ListItem Value=200>200</asp:ListItem>

<asp:ListItem Value=300>300</asp:ListItem>

<asp:ListItem Value=400>400</asp:ListItem>

<asp:ListItem Value=500>500</asp:ListItem>

</asp:DropDownList>

<asp:RequiredFieldValidator
id="Requiredfieldvalidator2" runat="server"
ControlToValidate="SelectWeight"

ErrorMessage="<br>Empty Field -- Came from Table"

Display="Dynamic"></asp:RequiredFieldValidator>

</TD>
</TR>
</TBODY>
</TABLE>

</form>

</BODY>
</HTML>
 
asp.net validation works by adding a custom attribute to each element that
needs validation. then when validation is done, the validation routine scans
all elements looking for this attribute, whose value indicates the
validation routine to call. You just need to add the attribute yourself.


-- bruce (sqlwork.com)




Dnna said:
I have a table which is bound to an Internet Explorer XML
data island. I'm using ASP.NET's client-side validators
for an input field in the table. The problem is that if
the input fields are in a table that is bound to the
island (such that the rows are dynamically generated by IE
from the XML data island), the validators do not work. If
the table is not bound, the validators do work, but then I
don't have the table iterating through all the elements in
my xml island.

If I hard-code a Javascript onchange event into each form
field and then write a custom javascript function, I might
be able to manually invoke the validators. But then I need
to figure out how to manually call the ASP.NET front-end
validators. I'd prefer to stick to "pure" ASP.NET
validation and have it work w/ IE XML data island bound
table if at all possible.

BTW, I realize that I could bind the XML on the server-
side using ASP.NET's data-binding methods. The advantage
to using the client-side IE XML data islands is that I can
keep all of the data in an XML format from the front-end
all the way to my XML-compatile ORacle 9i database on the
back-end, which reduces the amount and complexity of code
that needs to be written.

Any suggestions?

Here is the generated code for my table:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN"> <HTML> <HEAD>
<TITLE>Patient Visits</TITLE>
</HEAD>
<BODY>
<H1>Patient Visits</H1>
<XML ID="VisitsDSO">
<visits>
<visit>
<number>1</number>
<height>111</height>
<weight>100</weight>
<date>1999-01-01</date>
</visit>
<visit>
<number>2</number>
<height>222</height>
<weight>200</weight>
<date>2000-01-01</date>
</visit>
<visit>
<number>3</number>
<height>333</height>
<weight>300</weight>
<date>2001-01-01</date>
</visit>
<visit>
<number>4</number>
<height>444</height>
<weight>400</weight>
<date>2002-01-01</date>
</visit>
<visit>
<number>5</number>
<height>555</height>
<weight>500</weight>
<date>2003-01-01</date>
</visit>
</visits>
</xml>


<form name="_ctl0" method="post"
action="PatientVisits.aspx" language="javascript"
onsubmit="ValidatorOnSubmit();" id="_ctl0"> <input
type="hidden" name="__VIEWSTATE"
value="dDwtNDg3NzIxNjA3Ozs+LcqNO2ytHf6sg9tZGopQzt1vegQ=" />

<script language="javascript"
src="/aspnet_client/system_web/1_1_4322/WebUIValidation.js"
</script>
<TABLE datasrc="#VisitsDSO" BORDER="1">
<THEAD>
<TR>
<TH>
Visit</TH>
<TH>
Date</TH>
<TH>
Height</TH>
<TH>
Height</TH>
<TH>
Weight</TH>
</TR>
</THEAD>
<TR>
<TD VALIGN="top">
<SPAN DATAFLD="number"></SPAN>
</TD>
<TD VALIGN="top"><input name="TextBox2" id="TextBox2"
type="text" datafld="Date" />
<span id="Requiredfieldvalidator4"
controltovalidate="TextBox2" errormessage="<br>Empty
Field" display="Dynamic"
evaluationfunction="RequiredFieldValidatorEvaluateIsValid"
initialvalue="" style="color:Red;display:none;"><br>Empty
Field</span>
<span id="Comparevalidator1"
controltovalidate="TextBox2" errormessage="<br>Please
enter a whole number greater than or equal to 12345."
type="Integer"
evaluationfunction="CompareValidatorEvaluateIsValid"
valuetocompare="12345" operator="GreaterThanEqual"
style="color:Red;visibility:hidden;"><br>Please enter a
whole number greater than or equal to 12345.</span>
</td>
</TR>
</TABLE>


<script language="javascript">
<!--
var Page_Validators = new Array(document.all
["Requiredfieldvalidator1"],
document.all["Comparevalidator2"],
document.all["Requiredfieldvalidator4"],
document.all["Comparevalidator1"]);
// -->
</script>


<script language="javascript">
<!--
var Page_ValidationActive = false;
if (typeof(clientInformation) != "undefined" &&
clientInformation.appName.indexOf("Explorer") != -1) {
if (typeof(Page_ValidationVer) == "undefined")
alert("Unable to find script
library '/aspnet_client/system_web/1_1_4322/WebUIValidation
.js'. Try placing this file manually, or reinstall by
running 'aspnet_regiis -c'.");
else if (Page_ValidationVer != "125")
alert("This page uses an incorrect version of
WebUIValidation.js. The page expects version 125. The
script library is " + Page_ValidationVer + ".");
else
ValidatorOnLoad();
}

function ValidatorOnSubmit() {
if (Page_ValidationActive) {
ValidatorCommonOnSubmit();
}
}
// -->
</script>


</form>
</BODY>
</HTML>



----------------------------------------
Here is a simplified version of the aspx page:

<%@ Page Language="vb" AutoEventWireup="false"
Codebehind="PatientVisits.aspx.vb"
Inherits="App1.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
</HEAD>
<BODY>
<!--#include virtual="FormData.asp"-->
<form runat="server">

<!-- binding works here, AND
validation does also. -->
<asp:DropDownList
id="Dropdownlist1" datasrc="#VisitsDSO" datafld="Weight"
runat="server">
<asp:ListItem></asp:ListItem>
<asp:ListItem
Value="100">100</asp:ListItem>
<asp:ListItem
Value="200">200</asp:ListItem>
<asp:ListItem
Value="300">300</asp:ListItem>
<asp:ListItem
Value="400">400</asp:ListItem>
<asp:ListItem
Value="500">500</asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator
id="Requiredfieldvalidator3" runat="server"
ControlToValidate="Dropdownlist1" ErrorMessage="<br>Empty
Field"

Display="Dynamic"></asp:RequiredFieldValidator>
<br>

<TABLE BORDER="1"
datasrc="#VisitsDSO">
<THEAD>
<TR>

<TH>
Weight</TH>
</TR>
</THEAD>
<TBODY>
<TR>
<TD
VALIGN="top">
<!--
binding works here, but validation does not. -->

<asp:DropDownList id="SelectWeight"
datafld="Weight" runat="server">

<asp:ListItem></asp:ListItem>

<asp:ListItem Value=100>100</asp:ListItem>

<asp:ListItem Value=200>200</asp:ListItem>

<asp:ListItem Value=300>300</asp:ListItem>

<asp:ListItem Value=400>400</asp:ListItem>

<asp:ListItem Value=500>500</asp:ListItem>

</asp:DropDownList>

<asp:RequiredFieldValidator
id="Requiredfieldvalidator2" runat="server"
ControlToValidate="SelectWeight"

ErrorMessage="<br>Empty Field -- Came from Table"

Display="Dynamic"></asp:RequiredFieldValidator>

</TD>
</TR>
</TBODY>
</TABLE>

</form>

</BODY>
</HTML>
 
Thanks for your help. I have a question about the exact
syntax to use. My table ends up with four rows, but the
aspx source just looks like this for textbox:
<input type="text" name="TextBox2" id="TextBox2"
DATAFLD="Date" runat="server">

and like this for dropdown:
<asp:DropDownList id="SelectWeight" DATAFLD="Weight"
runat="server">
<asp:ListItem></asp:ListItem>
<asp:ListItem Value="100">100</asp:ListItem>
<asp:ListItem Value="200">200</asp:ListItem>
<asp:ListItem Value="300">300</asp:ListItem>
</asp:DropDownList>

Where should I add the custom attribute? And are there any
syntax or value rules?

Thanks again! I really appreciate the help.
-- Dnna

-----Original Message-----
asp.net validation works by adding a custom attribute to each element that
needs validation. then when validation is done, the validation routine scans
all elements looking for this attribute, whose value indicates the
validation routine to call. You just need to add the attribute yourself.


-- bruce (sqlwork.com)




I have a table which is bound to an Internet Explorer XML
data island. I'm using ASP.NET's client-side validators
for an input field in the table. The problem is that if
the input fields are in a table that is bound to the
island (such that the rows are dynamically generated by IE
from the XML data island), the validators do not work. If
the table is not bound, the validators do work, but then I
don't have the table iterating through all the elements in
my xml island.

If I hard-code a Javascript onchange event into each form
field and then write a custom javascript function, I might
be able to manually invoke the validators. But then I need
to figure out how to manually call the ASP.NET front-end
validators. I'd prefer to stick to "pure" ASP.NET
validation and have it work w/ IE XML data island bound
table if at all possible.

BTW, I realize that I could bind the XML on the server-
side using ASP.NET's data-binding methods. The advantage
to using the client-side IE XML data islands is that I can
keep all of the data in an XML format from the front-end
all the way to my XML-compatile ORacle 9i database on the
back-end, which reduces the amount and complexity of code
that needs to be written.

Any suggestions?

Here is the generated code for my table:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN"> <HTML> <HEAD>
<TITLE>Patient Visits</TITLE>
</HEAD>
<BODY>
<H1>Patient Visits</H1>
<XML ID="VisitsDSO">
<visits>
<visit>
<number>1</number>
<height>111</height>
<weight>100</weight>
<date>1999-01-01</date>
</visit>
<visit>
<number>2</number>
<height>222</height>
<weight>200</weight>
<date>2000-01-01</date>
</visit>
<visit>
<number>3</number>
<height>333</height>
<weight>300</weight>
<date>2001-01-01</date>
</visit>
<visit>
<number>4</number>
<height>444</height>
<weight>400</weight>
<date>2002-01-01</date>
</visit>
<visit>
<number>5</number>
<height>555</height>
<weight>500</weight>
<date>2003-01-01</date>
</visit>
</visits>
</xml>


<form name="_ctl0" method="post"
action="PatientVisits.aspx" language="javascript"
onsubmit="ValidatorOnSubmit();" id="_ctl0"> <input
type="hidden" name="__VIEWSTATE"
value="dDwtNDg3NzIxNjA3Ozs+LcqNO2ytHf6sg9tZGopQzt1vegQ=" />

<script language="javascript"
src="/aspnet_client/system_web/1_1_4322/WebUIValidation.js"
<TABLE datasrc="#VisitsDSO" BORDER="1">
<THEAD>
<TR>
<TH>
Visit</TH>
<TH>
Date</TH>
<TH>
Height</TH>
<TH>
Height</TH>
<TH>
Weight</TH>
</TR>
</THEAD>
<TR>
<TD VALIGN="top">
<SPAN DATAFLD="number"></SPAN>
</TD>
<TD VALIGN="top"><input name="TextBox2" id="TextBox2"
type="text" datafld="Date" />
<span id="Requiredfieldvalidator4"
controltovalidate="TextBox2" errormessage="<br>Empty
Field" display="Dynamic"
evaluationfunction="RequiredFieldValidatorEvaluateIsValid"
initialvalue=""
style="color:Red;display:none;"> said:
Field</span>
<span id="Comparevalidator1"
controltovalidate="TextBox2" errormessage="<br>Please
enter a whole number greater than or equal to 12345."
type="Integer"
evaluationfunction="CompareValidatorEvaluateIsValid"
valuetocompare="12345" operator="GreaterThanEqual"
style="color:Red;visibility:hidden;"><br>Please enter a
whole number greater than or equal to 12345.</span>
</td>
</TR>
</TABLE>


<script language="javascript">
<!--
var Page_Validators = new Array(document.all
["Requiredfieldvalidator1"],
document.all["Comparevalidator2"],
document.all["Requiredfieldvalidator4"],
document.all["Comparevalidator1"]);
// -->
</script>


<script language="javascript">
<!--
var Page_ValidationActive = false;
if (typeof(clientInformation) != "undefined" &&
clientInformation.appName.indexOf("Explorer") != -1) {
if (typeof(Page_ValidationVer) == "undefined")
alert("Unable to find script
library '/aspnet_client/system_web/1_1_4322/WebUIValidation
.js'. Try placing this file manually, or reinstall by
running 'aspnet_regiis -c'.");
else if (Page_ValidationVer != "125")
alert("This page uses an incorrect version of
WebUIValidation.js. The page expects version 125. The
script library is " + Page_ValidationVer + ".");
else
ValidatorOnLoad();
}

function ValidatorOnSubmit() {
if (Page_ValidationActive) {
ValidatorCommonOnSubmit();
}
}
// -->
</script>


</form>
</BODY>
</HTML>



----------------------------------------
Here is a simplified version of the aspx page:

<%@ Page Language="vb" AutoEventWireup="false"
Codebehind="PatientVisits.aspx.vb"
Inherits="App1.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
</HEAD>
<BODY>
<!--#include virtual="FormData.asp"-->
<form runat="server">

<!-- binding works here, AND
validation does also. -->
<asp:DropDownList
id="Dropdownlist1" datasrc="#VisitsDSO" datafld="Weight"
runat="server">
<asp:ListItem></asp:ListItem>
<asp:ListItem
Value="100">100</asp:ListItem>
<asp:ListItem
Value="200">200</asp:ListItem>
<asp:ListItem
Value="300">300</asp:ListItem>
<asp:ListItem
Value="400">400</asp:ListItem>
<asp:ListItem
Value="500">500</asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator
id="Requiredfieldvalidator3" runat="server"
ControlToValidate="Dropdownlist1"
ErrorMessage= said:
Field"

Display="Dynamic"></asp:RequiredFieldValidator>
<br>

<TABLE BORDER="1"
datasrc="#VisitsDSO">
<THEAD>
<TR>

<TH>
Weight</TH>
</TR>
</THEAD>
<TBODY>
<TR>
<TD
VALIGN="top">
<!--
binding works here, but validation does not. -->

<asp:DropDownList id="SelectWeight"
datafld="Weight" runat="server">

<asp:ListItem></asp:ListItem>

<asp:ListItem Value=100>100</asp:ListItem>

<asp:ListItem Value=200>200</asp:ListItem>

<asp:ListItem Value=300>300</asp:ListItem>

<asp:ListItem Value=400>400</asp:ListItem>

<asp:ListItem Value=500>500</asp:ListItem>

</asp:DropDownList>

<asp:RequiredFieldValidator
id="Requiredfieldvalidator2" runat="server"
ControlToValidate="SelectWeight"

ErrorMessage="<br>Empty Field -- Came from Table"

Display="Dynamic"></asp:RequiredFieldValidator>

</TD>
</TR>
</TBODY>
</TABLE>

</form>

</BODY>
</HTML>


.
 
Back
Top