100分求解:ASP.NET和数据校验

justforfun9912 2004-11-29 04:40:21
如下一段代码是浏览器上看到的:
<TR>
<TD class="firstcol">证件类型</TD>
<TD>
<SPAN id="UC_CustomerData1_fld_pid_type"><INPUT id="UC_CustomerData1_fld_pid_type_0" type="radio" name="UC_CustomerData1:fld_pid_type"
value="I" /><LABEL for="UC_CustomerData1_fld_pid_type_0">公民身份证</LABEL><INPUT id="UC_CustomerData1_fld_pid_type_1" type="radio" name="UC_CustomerData1:fld_pid_type"
value="T" /><LABEL for="UC_CustomerData1_fld_pid_type_1">临时身份证</LABEL><INPUT id="UC_CustomerData1_fld_pid_type_2" type="radio" name="UC_CustomerData1:fld_pid_type"
value="S" /><LABEL for="UC_CustomerData1_fld_pid_type_2">军官证</LABEL><INPUT id="UC_CustomerData1_fld_pid_type_3" type="radio" name="UC_CustomerData1:fld_pid_type"
value="P" /><LABEL for="UC_CustomerData1_fld_pid_type_3">中华人民共和国护照</LABEL><INPUT id="UC_CustomerData1_fld_pid_type_4" type="radio" name="UC_CustomerData1:fld_pid_type"
value="L" /><LABEL for="UC_CustomerData1_fld_pid_type_4">营业执照</LABEL><INPUT id="UC_CustomerData1_fld_pid_type_5" type="radio" name="UC_CustomerData1:fld_pid_type"
value="O" /><LABEL for="UC_CustomerData1_fld_pid_type_5">其他有效证件</LABEL></SPAN>
<SPAN id="UC_CustomerData1_RequiredFieldValidator10" controltovalidate="UC_CustomerData1_fld_pid_type"
errormessage="*" display="Dynamic" evaluationfunction="RequiredFieldValidatorEvaluateIsValid"
initialvalue="" style="color:Red;display:none;">*</SPAN></TD>
</TR>
<TR>
<TD class="firstcol">证件号码</TD>
<TD>
<INPUT name="UC_CustomerData1:fld_pid_info" type="text" maxlength="20" size="20" id="UC_CustomerData1_fld_pid_info"
class="TextBox_Show" onfocus="this.className='TextBox_Over';" onblur="this.className='TextBox_OnBlur';"
onkeydown="if(event.keyCode == 13) event.keyCode = 9;" onclick="javascript:clear_check(UC_CustomerData1_rgv_pid_info, UC_CustomerData1_fld_pid_type);" />
<SPAN id="UC_CustomerData1_rgv_pid_info" controltovalidate="UC_CustomerData1_fld_pid_info"
errormessage="*" display="Dynamic" evaluationfunction="RegularExpressionValidatorEvaluateIsValid"
validationexpression="\d{18}|\d{15}" style="color:Red;display:none;">*</SPAN> <SPAN id="UC_CustomerData1_RequiredFieldValidator43" controltovalidate="UC_CustomerData1_fld_pid_info"
errormessage="*" display="Dynamic" evaluationfunction="RequiredFieldValidatorEvaluateIsValid" initialvalue="" style="color:Red;display:none;">
*</SPAN></TD>
</TR>


对应的ASPX描述是这样的:
<TD class="firstcol">证件类型</TD>
<TD>
<ASP:RADIOBUTTONLIST id="fld_pid_type" runat="server" repeatdirection="Horizontal" repeatlayout="Flow"
enableviewstate="False">
<ASP:LISTITEM value="I">公民身份证</ASP:LISTITEM>
<ASP:LISTITEM value="T">临时身份证</ASP:LISTITEM>
<ASP:LISTITEM value="S">军官证</ASP:LISTITEM>
<ASP:LISTITEM value="P">中华人民共和国护照</ASP:LISTITEM>
<ASP:LISTITEM value="L">营业执照</ASP:LISTITEM>
<ASP:LISTITEM value="O">其他有效证件</ASP:LISTITEM>
</ASP:RADIOBUTTONLIST>
<ASP:REQUIREDFIELDVALIDATOR id="RequiredFieldValidator10" runat="server" controltovalidate="fld_pid_type" display="Dynamic"
errormessage="*" enableviewstate="False"></ASP:REQUIREDFIELDVALIDATOR></TD>
</TR>
<TR>
<TD class="firstcol">证件号码</TD>
<TD>
<ASP:TEXTBOX id="fld_pid_info" runat="server" enableviewstate="False" columns="20" maxlength="20"></ASP:TEXTBOX>
<ASP:REGULAREXPRESSIONVALIDATOR id="rgv_pid_info" runat="server" controltovalidate="fld_pid_info" display="Dynamic"
errormessage="*" validationexpression="\d{18}|\d{15}"></ASP:REGULAREXPRESSIONVALIDATOR>
<ASP:REQUIREDFIELDVALIDATOR id="RequiredFieldValidator43" runat="server" controltovalidate="fld_pid_info" display="Dynamic"
errormessage="*" enableviewstate="False"></ASP:REQUIREDFIELDVALIDATOR></TD>
</TR>


请教:我如何在客户端添加一些JavaScript代码,使得选中证件类型=身份证时,规则表达式校验器rgv_pid_info才起作用,而选中其他证件类型时,不需要校验是否输入了15、18个数字字符?
...全文
138 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
justforfun9912 2004-11-29
  • 打赏
  • 举报
回复
感谢回复。我用了个很笨的办法,可以不刷新页面。
<SCRIPT language="javascript" type="text/javascript">
function check_clear (vForm, vValidator)
{
for(i=0;i<vForm.elements.length;i++)
{
e = vForm.elements[i];
if(e.type=='radio' && e.id=="UC_CustomerData1_fld_pid_type_0")
{
vValidator.enabled = e.checked;
}
}
}
</SCRIPT>

然后给这个单选列表添加一个客户端的onclick事件:
fld_pid_type.Attributes.Add ("onclick", "javascript:check_clear (Form1, UC_CustomerData1_rgv_pid_info);");

效果不是很好,但已经满足了我的需要。
goody9807 2004-11-29
  • 打赏
  • 举报
回复
你把 规则表达式校验器rgv_pid_info的功能也用js写
否则也要刷新页面
penning 2004-11-29
  • 打赏
  • 举报
回复
你可以让验证控件EnableClientScript="False",再服务器端根据用户的选择再决定是否Validate();
MSDN的例子
<%@ Page Language="C#" AutoEventWireup="True" %>

<html>
<head>
<script runat="server">

void Button_Click(Object sender, EventArgs e)
{

Random rand_number = new Random();

Compare1.ValueToCompare = rand_number.Next(1, 10).ToString();
Compare1.Validate();

if (Page.IsValid)
{
lblOutput.Text = "You guessed correctly!!";
}
else
{
lblOutput.Text = "You guessed poorly";
}

lblOutput.Text += "<br><br>" + "The number is: " + Compare1.ValueToCompare;

}

</script>

</head>
<body>

<form runat=server>

<h3>Validator Example</h3>

<h5>Pick a number between 1 and 10:</h5>

<asp:TextBox id="TextBox1"
runat="server"/>

<asp:CompareValidator id="Compare1"
ControlToValidate="TextBox1"
ValueToCompare="0"
EnableClientScript="False"
Type="Integer"
Display="Dynamic"
ErrorMessage="Incorrect guess!!"
Text="*"
runat="server"/>

<asp:RequiredFieldValidator id="Require1"
ControlToValidate="TextBox1"
EnableClientScript="False"
Display="Dynamic"
ErrorMessage="No number entered!!"
Text="*"
runat="server"/>

<br><br>

<asp:Button id="Button1"
Text="Submit"
OnClick="Button_Click"
runat="server"/>

<br><br>

<asp:Label id="lblOutput"
Font-Name="verdana"
Font-Size="10pt"
runat="server"/>

<br><br>

<asp:ValidationSummary
id="Summary1"
runat="server"/>

</form>

</body>
</html>


brightheroes 2004-11-29
  • 打赏
  • 举报
回复
不可避免的要刷新一次

private void RadioButtonList1_SelectedIndexChanged(object sender, System.EventArgs e)
{
if(this.RadioButtonList1.SelectedItem.Text = "公民身份证")
this.RequiredFieldValidator1.Enabled = false;
}
lr2651 2004-11-29
  • 打赏
  • 举报
回复
干嘛还在javascript里写啊,直接在dropdownlist的selected_change事件里写
if (dropdownlist.selecctValue != "I")
{
验证控件.Enable = false;
}
就好了
lr2651 2004-11-29
  • 打赏
  • 举报
回复
干嘛还在javascript里写啊,直接在dropdownlist的selected_change事件里写
if (dropdownlist.selecctValue != "I")
{
验证控件.Enable = false;
}
就好了
brightheroes 2004-11-29
  • 打赏
  • 举报
回复
在客户端处理好像不是很方便,嗯
yichuan1982 2004-11-29
  • 打赏
  • 举报
回复
*.attrubute.add
yichuan1982 2004-11-29
  • 打赏
  • 举报
回复
呵呵,沾光,同意
brightheroes 2004-11-29
  • 打赏
  • 举报
回复
给你的RADIOBUTTONLIST 加上一个事件
当选中中证件类型!=身份证
设置这个验证控件的enable为true
haoztao 2004-11-29
  • 打赏
  • 举报
回复
不懂!up

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧