我不是一个asp.net大师,所以我面对这个愚蠢的事情。 我有一个注册表单,其中只有从下拉列表中选择了值“IT”时,才必须验证字段(VAT NUMBER称为'piva')。
这是前面的代码:
<asp:TextBox ID="pivaTextBox" runat="server" Text='<%# Bind("piva") %>'
MaxLength="50" Width="400px" />
<asp:RequiredFieldValidator ID="RequiredPiva" runat="server"
ControlToValidate="pivaTextBox"
ErrorMessage="<%$ Resources:Resource, CampoObbligatorio %>" Display="Dynamic"
CssClass="little_text" />
<asp:CustomValidator ID="PivaEsistente" runat="server"
ErrorMessage="Partita IVA esistente nel database" meta:resourcekey="PivaEsistente"
ControlToValidate="pivaTextBox" CssClass="little_text" Display="Dynamic"
onservervalidate="PIVAEsistente_ServerValidate"></asp:CustomValidator>
<asp:RegularExpressionValidator ID="PivaSize" runat="server" ControlToValidate="pivaTextBox" CssClass="little_text" Display="Dynamic" ErrorMessage="Check the VAT Number length. 11 characters and only numbers." ValidationExpression="[0-9]{11}" ValidationGroup="pivaItalia">
</asp:RegularExpressionValidator>
在我写的背后的代码中:
protected void PIVAEsistente_ServerValidate(object source, ServerValidateEventArgs args)
{
string piva = args.Value;
using (CMALinqModelDataContext ent = new CMALinqModelDataContext())
{
var n = (from u in ent.VUser
where u.piva == piva
select u).Count<VUser>();
args.IsValid = n.ToString().Equals("0");
}
}
protected void nazioneDropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ddl = (DropDownList)sender;
DropDownList ddlProv = (DropDownList)FormUser.FindControl("provinciaDropDownList");
if ("it".Equals(ddl.SelectedValue))
{
ddlProv.Enabled = true;
Page.Validate("pivaItalia");
}
else
{
ddlProv.SelectedIndex = 0;
ddlProv.Enabled = false;
}
}
第一种方法检查增值税号码是否已存在且有效。 第二个检查是否从国家下拉列表中选择了“它”并解锁省下拉列表并且应该根据上面的RegularExpressionValidator验证增值税号。
事实是,它始终是验证,但即使我收到错误消息,也可以提交表单。 那不好。
任何人都可以建议任何解决方案?我错过了什么?
答案 0 :(得分:0)
看起来你的问题就是外壳。
在您的问题中,您说“我有一个注册表单,其中一个字段(VAT号码称为'piva')必须仅在从下拉列表中选择值”IT“时才能验证。”,但在您的代码中将小写值与此代码中的选定值进行比较:
if ("it".Equals(ddl.SelectedValue))
{
ddlProv.Enabled = true;
Page.Validate("pivaItalia");
}
else
{
ddlProv.SelectedIndex = 0;
ddlProv.Enabled = false;
}
而是强制将比较的值与同一个案例(.ToLower()
或.ToUpper()
)进行比较,如下所示:
if ("it".Equals(ddl.SelectedValue.ToLower()))
{
ddlProv.Enabled = true;
Page.Validate("pivaItalia");
}
else
{
ddlProv.SelectedIndex = 0;
ddlProv.Enabled = false;
}
OR
if ("IT".Equals(ddl.SelectedValue.ToUpper()))
{
ddlProv.Enabled = true;
Page.Validate("pivaItalia");
}
else
{
ddlProv.SelectedIndex = 0;
ddlProv.Enabled = false;
}
答案 1 :(得分:0)
除了必须解决的大写字母之外,如果是这种情况,问题是“SelectedValue”你应该使用“选择项目”。
if (ddl.SelectedItem.Equals("it"))
{
ddlProv.Enabled = true;
Page.Validate("pivaItalia");
}
else
{
ddlProv.SelectedIndex = 0;
ddlProv.Enabled = false;
}
我在一个comboBox(ddl)上测试了这个,我有:它,pippo,爸爸等等。它有效:
private void button1_Click(object sender, EventArgs e)
{
if (ddl.SelectedItem.Equals("it"))
{
label1.Text = "ok";
}
else
{
label1.Text = "no";
}
}
因此,如果您仍然遇到问题,请更好地解释发生了什么,可能现在问题出现在其他地方。