问题描述
在.NET页面中有2个表格,一个的ID为tbHeader,一个为tbForm
tbHeader 为表头文件,在tbForm中插入一个输入框控件和一个数据验证控件,然后通过JS脚本将2个表格合并起来.问题点,不添加合并脚本数据验证控件能正常检测输入框是否空值,合并后验证控件无法正常检测输入框是否空值.
报错为"'RequiredFieldValidator2' 为空或不是对象".
困惑的是查看输出页面的源文件数据验证控件也有合并进去.明明有'RequiredFieldValidator2' 这个ID的span,但是JS脚本就是无法检测到.后面附带JS合并表格的关键代码,C#的网页代码和生成页面输出的源代码.合并表格的关键JS脚本如下
<script type="text/javascript" id="GridView">
function MergeTable(source, dest) {
var row;
var cell;
var sourceTb = document.all(source);
var destTb = document.all(dest);
for (var i = 0; i < sourceTb.rows.length; i++) {
row = document.createElement("TR");
for (var j = 0; j < sourceTb.rows(i).cells.length; j++) {
cell = document.createElement("TD");
row.appendChild(cell);
//复制对象
for (k = 0; k < sourceTb.rows(i).cells(j).all.length; k++)
cell.appendChild(sourceTb.rows(i).cells(j).all.item(k)); }
destTb.tBodies(0).appendChild(row);
}
for (var i = sourceTb.rows.length - 1; i >= 0; i--) {
sourceTb.deleteRow(i)
}
} function ChangeTableLayout() {
if (document.all('tbHeader') == null)
MergeTable('tbForm', '');
else
MergeTable('tbForm', 'tbHeader');
} ChangeTableLayout();</script>
C# ASPX代码<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table id="tbHeader" style="width:100%;">
<tr>
<td>
test</td>
<td>
test2</td>
<td>
test3</td>
</tr>
</table>
</div>
<table id="tbForm" style="width:100%;">
<tr>
<td>
a<asp:TextBox ID="TextBox2" runat="server" ValidationGroup="11"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server"
ControlToValidate="TextBox2" ErrorMessage="aa" ValidationGroup="11"></asp:RequiredFieldValidator>
</td>
<td>
a<asp:Button ID="Button2" runat="server" Text="Button" ValidationGroup="11" />
</td>
<td>
aaa</td>
</tr>
</table>
<asp:TextBox ID="TextBox1" runat="server" ValidationGroup="22"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="bb" ValidationGroup="22"></asp:RequiredFieldValidator>
<asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="22" />
<script type="text/javascript" id="GridView">
function MergeTable(source, dest) {
var row;
var cell;
var sourceTb = document.all(source);
var destTb = document.all(dest);
for (var i = 0; i < sourceTb.rows.length; i++) {
row = document.createElement("TR");
for (var j = 0; j < sourceTb.rows(i).cells.length; j++) {
cell = document.createElement("TD");
row.appendChild(cell);
//复制对象
for (k = 0; k < sourceTb.rows(i).cells(j).all.length; k++)
cell.appendChild(sourceTb.rows(i).cells(j).all.item(k)); }
destTb.tBodies(0).appendChild(row);
}
for (var i = sourceTb.rows.length - 1; i >= 0; i--) {
sourceTb.deleteRow(i)
}
} function ChangeTableLayout() {
if (document.all('tbHeader') == null)
MergeTable('tbForm', '');
else
MergeTable('tbForm', 'tbHeader');
} ChangeTableLayout();</script>
</form>
</body>
</html>网页输出源文件<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
无标题页
</title></head>
<body>
<form name="form1" method="post" action="test.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="form1">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMjkwNTQ4NTAxZGS0CxRHGR8wKqiFyM217GAsRYcg6g==" />
</div><script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
<script src="/tool_management/WebResource.axd?d=R_7TMFam8FszGHFy1W_oaw2&t=633886943289445181" type="text/javascript"></script>
<script src="/tool_management/WebResource.axd?d=cofre_k955cVVWbdii-NwBKbQltWf6YVmFEh_Cn7sUw1&t=633886943289445181" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function WebForm_OnSubmit() {
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
return true;
}
//]]>
</script><div> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQKeoqrSDALs0fbZDAK7q7GGCALs0bLrBgKM54rGBsIv55ljAIVv3ND0hO04dP3oEkDu" />
</div>
<div>
<table id="tbHeader" style="width:100%;">
<tr>
<td>
test</td>
<td>
test2</td>
<td>
test3</td>
</tr>
</table>
</div>
<table id="tbForm" style="width:100%;">
<tr>
<td>
a<input name="TextBox2" type="text" id="TextBox2" />
<span id="RequiredFieldValidator2" style="color:Red;visibility:hidden;">aa</span>
</td>
<td>
a<input type="submit" name="Button2" value="Button" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("Button2", "", true, "11", "", false, false))" id="Button2" />
</td>
<td>
aaa</td>
</tr>
</table>
<input name="TextBox1" type="text" id="TextBox1" />
<span id="RequiredFieldValidator1" style="color:Red;visibility:hidden;">bb</span>
<input type="submit" name="Button1" value="Button" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("Button1", "", true, "22", "", false, false))" id="Button1" />
<script type="text/javascript" id="GridView">
function MergeTable(source, dest) {
var row;
var cell;
var sourceTb = document.all(source);
var destTb = document.all(dest);
for (var i = 0; i < sourceTb.rows.length; i++) {
row = document.createElement("TR");
for (var j = 0; j < sourceTb.rows(i).cells.length; j++) {
cell = document.createElement("TD");
row.appendChild(cell);
//复制对象
for (k = 0; k < sourceTb.rows(i).cells(j).all.length; k++)
cell.appendChild(sourceTb.rows(i).cells(j).all.item(k)); }
destTb.tBodies(0).appendChild(row);
}
for (var i = sourceTb.rows.length - 1; i >= 0; i--) {
sourceTb.deleteRow(i)
}
} function ChangeTableLayout() {
if (document.all('tbHeader') == null)
MergeTable('tbForm', 'GridView_Site');
else
MergeTable('tbForm', 'tbHeader');
} ChangeTableLayout();</script>
<script type="text/javascript">
//<![CDATA[
var Page_Validators = new Array(document.getElementById("RequiredFieldValidator2"), document.getElementById("RequiredFieldValidator1"));
//]]>
</script><script type="text/javascript">
//<![CDATA[
var RequiredFieldValidator2 = document.all ? document.all["RequiredFieldValidator2"] : document.getElementById("RequiredFieldValidator2");
RequiredFieldValidator2.controltovalidate = "TextBox2";
RequiredFieldValidator2.errormessage = "aa";
RequiredFieldValidator2.validationGroup = "11";
RequiredFieldValidator2.evaluationfunction = "RequiredFieldValidatorEvaluateIsValid";
RequiredFieldValidator2.initialvalue = "";
var RequiredFieldValidator1 = document.all ? document.all["RequiredFieldValidator1"] : document.getElementById("RequiredFieldValidator1");
RequiredFieldValidator1.controltovalidate = "TextBox1";
RequiredFieldValidator1.errormessage = "bb";
RequiredFieldValidator1.validationGroup = "22";
RequiredFieldValidator1.evaluationfunction = "RequiredFieldValidatorEvaluateIsValid";
RequiredFieldValidator1.initialvalue = "";
//]]>
</script>
<script type="text/javascript">
//<![CDATA[var Page_ValidationActive = false;
if (typeof(ValidatorOnLoad) == "function") {
ValidatorOnLoad();
}function ValidatorOnSubmit() {
if (Page_ValidationActive) {
return ValidatorCommonOnSubmit();
}
else {
return true;
}
}
//]]>
</script>
</form>
</body>
</html>
在.NET页面中有2个表格,一个的ID为tbHeader,一个为tbForm
tbHeader 为表头文件,在tbForm中插入一个输入框控件和一个数据验证控件,然后通过JS脚本将2个表格合并起来.问题点,不添加合并脚本数据验证控件能正常检测输入框是否空值,合并后验证控件无法正常检测输入框是否空值.
报错为"'RequiredFieldValidator2' 为空或不是对象".
困惑的是查看输出页面的源文件数据验证控件也有合并进去.明明有'RequiredFieldValidator2' 这个ID的span,但是JS脚本就是无法检测到.后面附带JS合并表格的关键代码,C#的网页代码和生成页面输出的源代码.合并表格的关键JS脚本如下
<script type="text/javascript" id="GridView">
function MergeTable(source, dest) {
var row;
var cell;
var sourceTb = document.all(source);
var destTb = document.all(dest);
for (var i = 0; i < sourceTb.rows.length; i++) {
row = document.createElement("TR");
for (var j = 0; j < sourceTb.rows(i).cells.length; j++) {
cell = document.createElement("TD");
row.appendChild(cell);
//复制对象
for (k = 0; k < sourceTb.rows(i).cells(j).all.length; k++)
cell.appendChild(sourceTb.rows(i).cells(j).all.item(k)); }
destTb.tBodies(0).appendChild(row);
}
for (var i = sourceTb.rows.length - 1; i >= 0; i--) {
sourceTb.deleteRow(i)
}
} function ChangeTableLayout() {
if (document.all('tbHeader') == null)
MergeTable('tbForm', '');
else
MergeTable('tbForm', 'tbHeader');
} ChangeTableLayout();</script>
C# ASPX代码<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table id="tbHeader" style="width:100%;">
<tr>
<td>
test</td>
<td>
test2</td>
<td>
test3</td>
</tr>
</table>
</div>
<table id="tbForm" style="width:100%;">
<tr>
<td>
a<asp:TextBox ID="TextBox2" runat="server" ValidationGroup="11"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server"
ControlToValidate="TextBox2" ErrorMessage="aa" ValidationGroup="11"></asp:RequiredFieldValidator>
</td>
<td>
a<asp:Button ID="Button2" runat="server" Text="Button" ValidationGroup="11" />
</td>
<td>
aaa</td>
</tr>
</table>
<asp:TextBox ID="TextBox1" runat="server" ValidationGroup="22"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="bb" ValidationGroup="22"></asp:RequiredFieldValidator>
<asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="22" />
<script type="text/javascript" id="GridView">
function MergeTable(source, dest) {
var row;
var cell;
var sourceTb = document.all(source);
var destTb = document.all(dest);
for (var i = 0; i < sourceTb.rows.length; i++) {
row = document.createElement("TR");
for (var j = 0; j < sourceTb.rows(i).cells.length; j++) {
cell = document.createElement("TD");
row.appendChild(cell);
//复制对象
for (k = 0; k < sourceTb.rows(i).cells(j).all.length; k++)
cell.appendChild(sourceTb.rows(i).cells(j).all.item(k)); }
destTb.tBodies(0).appendChild(row);
}
for (var i = sourceTb.rows.length - 1; i >= 0; i--) {
sourceTb.deleteRow(i)
}
} function ChangeTableLayout() {
if (document.all('tbHeader') == null)
MergeTable('tbForm', '');
else
MergeTable('tbForm', 'tbHeader');
} ChangeTableLayout();</script>
</form>
</body>
</html>网页输出源文件<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
无标题页
</title></head>
<body>
<form name="form1" method="post" action="test.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="form1">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMjkwNTQ4NTAxZGS0CxRHGR8wKqiFyM217GAsRYcg6g==" />
</div><script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
<script src="/tool_management/WebResource.axd?d=R_7TMFam8FszGHFy1W_oaw2&t=633886943289445181" type="text/javascript"></script>
<script src="/tool_management/WebResource.axd?d=cofre_k955cVVWbdii-NwBKbQltWf6YVmFEh_Cn7sUw1&t=633886943289445181" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function WebForm_OnSubmit() {
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false;
return true;
}
//]]>
</script><div> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQKeoqrSDALs0fbZDAK7q7GGCALs0bLrBgKM54rGBsIv55ljAIVv3ND0hO04dP3oEkDu" />
</div>
<div>
<table id="tbHeader" style="width:100%;">
<tr>
<td>
test</td>
<td>
test2</td>
<td>
test3</td>
</tr>
</table>
</div>
<table id="tbForm" style="width:100%;">
<tr>
<td>
a<input name="TextBox2" type="text" id="TextBox2" />
<span id="RequiredFieldValidator2" style="color:Red;visibility:hidden;">aa</span>
</td>
<td>
a<input type="submit" name="Button2" value="Button" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("Button2", "", true, "11", "", false, false))" id="Button2" />
</td>
<td>
aaa</td>
</tr>
</table>
<input name="TextBox1" type="text" id="TextBox1" />
<span id="RequiredFieldValidator1" style="color:Red;visibility:hidden;">bb</span>
<input type="submit" name="Button1" value="Button" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("Button1", "", true, "22", "", false, false))" id="Button1" />
<script type="text/javascript" id="GridView">
function MergeTable(source, dest) {
var row;
var cell;
var sourceTb = document.all(source);
var destTb = document.all(dest);
for (var i = 0; i < sourceTb.rows.length; i++) {
row = document.createElement("TR");
for (var j = 0; j < sourceTb.rows(i).cells.length; j++) {
cell = document.createElement("TD");
row.appendChild(cell);
//复制对象
for (k = 0; k < sourceTb.rows(i).cells(j).all.length; k++)
cell.appendChild(sourceTb.rows(i).cells(j).all.item(k)); }
destTb.tBodies(0).appendChild(row);
}
for (var i = sourceTb.rows.length - 1; i >= 0; i--) {
sourceTb.deleteRow(i)
}
} function ChangeTableLayout() {
if (document.all('tbHeader') == null)
MergeTable('tbForm', 'GridView_Site');
else
MergeTable('tbForm', 'tbHeader');
} ChangeTableLayout();</script>
<script type="text/javascript">
//<![CDATA[
var Page_Validators = new Array(document.getElementById("RequiredFieldValidator2"), document.getElementById("RequiredFieldValidator1"));
//]]>
</script><script type="text/javascript">
//<![CDATA[
var RequiredFieldValidator2 = document.all ? document.all["RequiredFieldValidator2"] : document.getElementById("RequiredFieldValidator2");
RequiredFieldValidator2.controltovalidate = "TextBox2";
RequiredFieldValidator2.errormessage = "aa";
RequiredFieldValidator2.validationGroup = "11";
RequiredFieldValidator2.evaluationfunction = "RequiredFieldValidatorEvaluateIsValid";
RequiredFieldValidator2.initialvalue = "";
var RequiredFieldValidator1 = document.all ? document.all["RequiredFieldValidator1"] : document.getElementById("RequiredFieldValidator1");
RequiredFieldValidator1.controltovalidate = "TextBox1";
RequiredFieldValidator1.errormessage = "bb";
RequiredFieldValidator1.validationGroup = "22";
RequiredFieldValidator1.evaluationfunction = "RequiredFieldValidatorEvaluateIsValid";
RequiredFieldValidator1.initialvalue = "";
//]]>
</script>
<script type="text/javascript">
//<![CDATA[var Page_ValidationActive = false;
if (typeof(ValidatorOnLoad) == "function") {
ValidatorOnLoad();
}function ValidatorOnSubmit() {
if (Page_ValidationActive) {
return ValidatorCommonOnSubmit();
}
else {
return true;
}
}
//]]>
</script>
</form>
</body>
</html>
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货