在asp:textbox上最少验证两个以上的单词

时间:2009-08-03 17:04:54

标签: c# asp.net webforms validation

您好我想验证输入,因此计数单词的方法如下:

public static string validateisMoreThanOneWord(string input, int numberWords)
        {
            try
            {
                int words = numberWords;
                for (int i = 0; i < input.Trim().Length; i++)
                {
                    if (input[i] == ' ')
                    {
                        words--;
                    }
                    if (words == 0)
                    {
                        return input.Substring(0, i);
                    }
                }
            }
            catch (Exception) { }
            return string.Empty;
        }

我把这个方法放在哪里,所以当方法在验证后返回空时,页面就不会回发(比如AjaxToolKit上的RequireFieldValidator)

谢谢!

2 个答案:

答案 0 :(得分:3)

将其实施为custom validator。有关示例,请参阅http://aspnet.4guysfromrolla.com/articles/073102-1.aspx

如果你想在没有回发的情况下工作,你还应该在Javascript中实现验证的客户端版本。你可以让客户端版本对C#实现进行AJAX调用,但它是相当简单的逻辑 - 所以我会选择在Javascript中实现它并为用户保存一个AJAX请求。

答案 1 :(得分:2)

首先,您可以简化这一点:

public static bool validateIsMoreThanOneWord(string input, int numberWords)
{
    if (string.IsNullOrEmpty(input)) return false;

    return ( input.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries).Length >= numberWords);    
}

此版本还具有易于扩展以包括其他空格(如制表符或回车)的优点。

下一步是您无法单独使用服务器端代码停止回发页面。相反,你需要使用CustomValidator并为它的ClientValidationFunction写一些javascript,它看起来像这样:

var numberWords = 2;
function checkWordCount(source, args)
{         
   var words = args.Value.split(' ');
   var count = 0;
   for (int i = 0; i<words.length && count<numberWords;i++)
   {
      if (words[i].length > 0) count++;
   }
   args.IsValid = (count >= numberWords);
   return args.IsValid;
}