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"
<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. -->
<aspropDownList
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>
</aspropDownList>
<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. -->
<aspropDownList 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>
</aspropDownList>
<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>
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"></script>
<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. -->
<aspropDownList
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>
</aspropDownList>
<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. -->
<aspropDownList 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>
</aspropDownList>
<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>