仅当在下拉列表中选择值时,才会在字段验证后面执行代码

时间:2013-11-18 19:49:08

标签: c# asp.net code-behind validation

我不是一个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验证增值税号。

事实是,它始终是验证,但即使我收到错误消息,也可以提交表单。 那不好。

任何人都可以建议任何解决方案?我错过了什么?

2 个答案:

答案 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";
        }

    }

因此,如果您仍然遇到问题,请更好地解释发生了什么,可能现在问题出现在其他地方。

相关问题