C# 显示更多错误消息
我有一个带有ipaddress的文本字段,但现在可以将ipaddress以127或192开头。我有这个:C# 显示更多错误消息,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个带有ipaddress的文本字段,但现在可以将ipaddress以127或192开头。我有这个: foreach (var item in lines) { if (item.StartsWith("127") || item.StartsWith("192")) { foreach (var result in lines) { //lines[result].ToString() resu
foreach (var item in lines)
{
if (item.StartsWith("127") || item.StartsWith("192"))
{
foreach (var result in lines)
{
//lines[result].ToString()
result.ToString();
return new ValidationResult("Some Ip Address(ses) are not correct" + "\n" + result.ToString() );
}
// return new ValidationResult("IpAddress cant be saved");
}
if (String.IsNullOrWhiteSpace(IpCondition.IpAddress))
return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName));
IPAddress address;
if (IPAddress.TryParse(item, out address))
continue;
else
return new ValidationResult("IpAddress cant be saved");
}
但问题是,如果将:127和192放在文本字段中,您只会看到:127而不是192作为错误的ipaddress
我现在是这样的:
IpConditionSettings IpCondition = validationContext.ObjectInstance as IpConditionSettings;
string[] lines = IpCondition.IpAddress.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
lines = IpCondition.IpAddress.Split(new char[0], StringSplitOptions.RemoveEmptyEntries);
var resultsValidation = new List<ValidationResult>();
foreach (var item in lines)
{
var result = lines.Where(x => x.StartsWith("127") || x.StartsWith("192"));
if (result.Any())
return new ValidationResult("Some Ip Address(ses) are not correct", result);
if (String.IsNullOrWhiteSpace(IpCondition.IpAddress))
return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName));
IPAddress address;
if (IPAddress.TryParse(item, out address))
continue;
else
return new ValidationResult("IpAddress cant be saved");
}
错误的IP地址?您可以使用linq查询来获取无效地址
var result = lines.Where(x => x.StartsWith("127") || x.StartsWith("192"));
然后使用构造函数返回结果
if(result.Any())
return new ValidationResult("Some IP-address(es) are not correct.", result);
或者,如果要以单个字符串形式返回它们,可以使用
string.Join()
我不知道你来这里的目的是什么。为什么要在
行上迭代两次对象,一次在另一行中迭代一次?有点不清楚你在问什么。行
是否表示textarea元素中的每一新行?假设这是来自验证属性的代码,您只能有一条与属性关联的错误消息。但是如何显示127和192呢?谢谢,这里的逻辑有点偏颇。一旦发现错误,您将返回行中的第一个位置。您有一条return new ValidationResult()
语句。一旦发现一个错误,它就会返回(即退出您的方法)啊,谢谢!!很好,我刚刚编辑了这篇文章。你能看一下吗,thx@SavantTheIncredible您可以添加| |!IPAddress.TryParse(x,out address)
到Where()
条件以返回不可解析的地址。
if(result.Any())
return new ValidationResult("Some IP-address(es) are not correct.", result);
if(result.Any())
return new ValidationResult("Some IP-address(es) are not correct.\n" + String.Join(", ", result));