您好我想验证输入,因此计数单词的方法如下:
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)
谢谢!
答案 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;
}