ASP.NET中使用C#的自定义验证器出现问题
我需要为这个任务使用一个自定义验证器,我必须解决的问题是:我必须验证在表单中输入州缩写的人是否是有效的美国州缩写(如AK、AL、AR等)。我没有看到任何语法错误,因此我的表单可以正常发布,但当我输入无效状态(如ZZ)时,它不会给我应该自动发布的错误消息(在本例中,我的错误消息是“请输入有效的美国状态(使用所有大写))。我的控件如下:ASP.NET中使用C#的自定义验证器出现问题,c#,asp.net,C#,Asp.net,我需要为这个任务使用一个自定义验证器,我必须解决的问题是:我必须验证在表单中输入州缩写的人是否是有效的美国州缩写(如AK、AL、AR等)。我没有看到任何语法错误,因此我的表单可以正常发布,但当我输入无效状态(如ZZ)时,它不会给我应该自动发布的错误消息(在本例中,我的错误消息是“请输入有效的美国状态(使用所有大写))。我的控件如下: <asp:Label id="state" text="State:" runat="server" /> <br />
<asp:Label
id="state"
text="State:"
runat="server" />
<br />
<asp:TextBox
id="valState"
MaxLength="2"
Width="20"
Runat="server" />
<asp:CustomValidator
id="reqState"
ControlToValidate="valState"
OnServerValidate="stateArrayCheck"
Text="Please enter a valid U.S. State (using all caps)"
Runat="server" />
<br /><br />
<asp:Button
id="btnSubmit"
Text="Submit"
Runat="server" />
我的活动的逻辑如下:
void stateArrayCheck (Object source, ServerValidateEventArgs args)
{
ArrayList stateList = new ArrayList();
stateList.Add("AL");
stateList.Add("AK");
stateList.Add("AR");
stateList.Add("AZ");
stateList.Add("CA");
stateList.Add("CO");
stateList.Add("AL");
stateList.Add("CT");
stateList.Add("DE");
stateList.Add("FL");
stateList.Add("GA");
stateList.Add("HI");
stateList.Add("ID");
stateList.Add("IL");
stateList.Add("IN");
stateList.Add("IA");
stateList.Add("KS");
stateList.Add("KY");
stateList.Add("LA");
stateList.Add("ME");
stateList.Add("MD");
stateList.Add("MA");
stateList.Add("MI");
stateList.Add("MN");
stateList.Add("MO");
stateList.Add("MS");
stateList.Add("MT");
stateList.Add("NC");
stateList.Add("NE");
stateList.Add("NH");
stateList.Add("NJ");
stateList.Add("NM");
stateList.Add("NY");
stateList.Add("ND");
stateList.Add("OH");
stateList.Add("OK");
stateList.Add("OR");
stateList.Add("PA");
stateList.Add("RI");
stateList.Add("SC");
stateList.Add("SD");
stateList.Add("TN");
stateList.Add("TX");
stateList.Add("UT");
stateList.Add("VA");
stateList.Add("VT");
stateList.Add("NM");
stateList.Add("WA");
stateList.Add("WY");
for(int i=0; i <= stateList.Count; i++)
{
if (valState.Text != stateList[i])
args.IsValid = false;
else
args.IsValid = true;
}
}
</script>
void stateArrayCheck(对象源,ServerValidateEventArgs参数)
{
ArrayList stateList=新的ArrayList();
州列表。添加(“AL”);
州列表。添加(“AK”);
国家清单。添加(“AR”);
州列表。添加(“AZ”);
州列表。添加(“CA”);
国家名单。添加(“公司”);
州列表。添加(“AL”);
州列表。添加(“CT”);
州列表。添加(“DE”);
州列表。添加(“FL”);
州列表。添加(“GA”);
状态列表。添加(“HI”);
状态列表。添加(“ID”);
州列表。添加(“IL”);
州列表。添加(“IN”);
州列表。添加(“IA”);
州列表。添加(“KS”);
州列表。添加(“KY”);
州列表。添加(“LA”);
州列表。添加(“我”);
州列表。添加(“MD”);
州列表。添加(“MA”);
州列表。添加(“MI”);
州列表。添加(“MN”);
州列表。添加(“MO”);
州列表。添加(“MS”);
州列表。添加(“MT”);
州列表。添加(“NC”);
州列表。添加(“NE”);
州列表。添加(“NH”);
州列表。添加(“NJ”);
州列表。添加(“NM”);
州列表。添加(“纽约”);
州列表。添加(“ND”);
州列表。添加(“OH”);
状态列表。添加(“确定”);
州列表。添加(“或”);
州列表。添加(“PA”);
州列表。添加(“RI”);
州列表。添加(“SC”);
州列表。添加(“SD”);
州列表。添加(“TN”);
州列表。添加(“TX”);
州列表。添加(“UT”);
州列表。添加(“VA”);
州列表。添加(“VT”);
州列表。添加(“NM”);
州列表。添加(“WA”);
州列表。添加(“WY”);
对于(int i=0;i这个的逻辑对于(int i=0;i这个的逻辑对于(int i=0;i你很接近。正如斯图尔特说的,你会再次将IsValid
设置为false
,即使你以前找到了匹配项。既然我假设你还在学习C,坚持你所学的(并理解)现在,就这样适应:
ArrayList stateList = new ArrayList();
stateList.Add("AL");
/* your entire list here */
stateList.Add("WY");
// expect to not find the state
args.IsValid = false;
// check if you can find the state in your list
foreach (string state in stateList)
{
if (valState.Text == state){
args.IsValid = true;
break; // no point in checking further elements, break the loop
}
}
foreach
循环而不是for
循环只是个人偏好。但是,你不能用foreach
循环超出集合的界限。你很接近了。正如斯图尔特克所说,你将再次将IsValid
设置为false
,即使你以前找到了匹配项。因为我假设你我们仍在学习C#,现在就坚持你所学到的(和理解的),然后像这样适应:
ArrayList stateList = new ArrayList();
stateList.Add("AL");
/* your entire list here */
stateList.Add("WY");
// expect to not find the state
args.IsValid = false;
// check if you can find the state in your list
foreach (string state in stateList)
{
if (valState.Text == state){
args.IsValid = true;
break; // no point in checking further elements, break the loop
}
}
foreach
循环而不是for
循环只是个人偏好。然而,你不能用foreach
循环超出集合的界限。为什么不使用下拉列表呢?如果这是一个真实世界的网站,我可能会这样做。但这是针对schol的,我们正在学习验证控制ols,所以我必须使用一个。为什么不使用下拉列表呢?如果这是一个真实世界的网站,我可能会这样做。但这是为schol设计的,我们正在学习验证控制,所以我必须使用一个。