填充文本框值的验证

时间:2014-05-07 09:17:39

标签: c# asp.net

Goodmorning Guys, 我在验证文本框中的值时遇到问题。我有一个包含3个阶段的下拉列表。在选择其中一个时,下面的文本框将填充以下百分比:20,40和60.还必须可以手动插入百分比,以便我在其中放置一个会话。但是这个值不能低于从下拉列表中选择的百分比。现在我的代码是这样的:

protected void Page_Load(object sender, EventArgs e)
    {
       string txt = txtpercents.Text;
       Session["percents"] = txt;
    int ddlchoise = Convert.ToInt32(ddlPhase.SelectedIndex);

        if (ddlchoise == 1)
        {
            txtpercents.Text = "20";

        }

        if (ddlchoise == 2)
        {
            txtpercents.Text = "40";
        }

        if (ddlchoise == 3)
        {
            txtpercents.Text = "60";
        }

         }

private void InsertObj()
{
  int percents = Convert.ToInt32(txtpercents.Text);
        int attemp = Convert.ToInt32(Session["percent"]);
        if (attemp > percents )
        {

             txtpercents.Text = (string)Session["percent"];
 Theobject.Percent = int.Parse(txtpercents.Text);
               }

   }

这有效,但是当手动输入的值低于下拉列表中的选定阶段时,我必须填充错误消息或验证。 谁可以帮助我?谢谢!

1 个答案:

答案 0 :(得分:1)

您应该使用CustomValidator

ASPX:

<asp:CustomValidator ID="CustomValidator1" 
                    runat="server" 
                    ControlToValidate="txtpercents"
                    ErrorMessage="Only 20,40 or 60 are allowed for percents" 
                    OnServerValidate="CustomValidator1_ServerValidate">
</asp:CustomValidator>

代码隐藏:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
    string[] allowed = { "20", "40", "60" };
    args.IsValid = allowed.Contains(txtpercents.Text.Trim());
}

您还可以使用javascript对ClientValidationFunction进行检验,有关详细信息,请参阅documentation

如果您想要一种动态方法,即使有人将其他百分比添加到DropDownList并忘记将其添加到ServerValidate

int percent;
var allowed = ddlchoise.Items.Cast<ListItem>()
    .Select(li => li.Text)
    .Where(t => int.TryParse(t, out percent));

更新 acc。评论:

  

我想要做的是:如果用户选择阶段2而不是te文本框   将40填充为值。不可能将值编辑为   小于40,因为下拉列表中的所选项目为pahse 2.

您仍然可以使用上面的代码,您只需稍微更改一下:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
    int percent;
    int selectedPercentage = int.Parse(ddlchoise.SelectedItem.Text);
    var allowed = ddlchoise.Items.Cast<ListItem>()
       .Select(li => li.Text)
       .Where(t => int.TryParse(t, out percent) && percent >= selectedPercentage);
    args.IsValid = allowed.Contains(txtpercents.Text.Trim());
}