C# 使用razor语法检查电子邮件地址在asp.net mvc视图中是否有效

C# 使用razor语法检查电子邮件地址在asp.net mvc视图中是否有效,c#,asp.net,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,我的任务是制作一个应用程序: 解析.CSV(逗号分隔值)文件 显示值 排除包含无效电子邮件地址的值 是否有可能纯粹从这个角度来做这件事?下面是我在视图中的最佳尝试代码。但是,我不断遇到以下错误: 编译错误 描述:编译资源时出错 服务此请求所必需的。请查看以下具体内容 错误详细信息,并适当修改源代码 编译器错误消息:CS1061:“对象”不包含定义 对于“包括”和“无扩展方法”,包括“接受第一个 找不到“object”类型的参数(是否缺少使用 指令或组件引用?) @model System.D

我的任务是制作一个应用程序:

  • 解析.CSV(逗号分隔值)文件
  • 显示值
  • 排除包含无效电子邮件地址的值
是否有可能纯粹从这个角度来做这件事?下面是我在视图中的最佳尝试代码。但是,我不断遇到以下错误:

编译错误

描述:编译资源时出错 服务此请求所必需的。请查看以下具体内容 错误详细信息,并适当修改源代码

编译器错误消息:CS1061:“对象”不包含定义 对于“包括”和“无扩展方法”,包括“接受第一个 找不到“object”类型的参数(是否缺少使用 指令或组件引用?)

@model System.Data.DataTable
@使用系统数据;
上载文件
@使用(Html.BeginForm(“Upload”,“Home”,null,FormMethod.Post,new{enctype=“multipart/formdata”}))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
如果(型号!=null)
{
@foreach(Model.Columns中的数据列col)
{
@col.ColumnName
}
@foreach(Model.Rows中的数据行)
{   
var电子邮件=行[“电子邮件”];
@如果(包括(“@”)在内的电子邮件){
foreach(Model.Columns中的数据列col)
{
@行[列名称]
}
}
}
}
}

在我看来,限制数据集更多的是控制器的责任,而不是视图

尽管如此,我知道有几种方法可以验证电子邮件地址。第一个是使用类构造函数,如果电子邮件地址的格式无效,它将抛出
FormatException

string email = row["Email"].ToString();
try {
    var address = new MailAddress(email);
    // Do something with the valid email address.
}
catch(FormatException ex){
    // The email address was invalid.
}
注意:如果您期望许多地址无效,那么抛出和捕获异常的开销可能会影响您的性能

另一个选项是使用
Regex.IsMatch(email,someRegexString)
来确定电子邮件是否匹配某个正则表达式。根据您的电子邮件地址规则是否通用或简单,您可以通过在线搜索找到
someRegexString
的一些选项。如果你的规则足够简单,那么你可能最容易尝试和使用它

如果查找
@
字符的存在性足够好,可以使用
Contains()

string email=row[“email”].ToString();
@if(email.Contains(“@”)){
foreach(Model.Columns中的数据列col)
{
@行[列名称]
}
}

在我看来,限制数据集更多的是控制器的责任,而不是视图

尽管如此,我知道有几种方法可以验证电子邮件地址。第一个是使用类构造函数,如果电子邮件地址的格式无效,它将抛出
FormatException

string email = row["Email"].ToString();
try {
    var address = new MailAddress(email);
    // Do something with the valid email address.
}
catch(FormatException ex){
    // The email address was invalid.
}
注意:如果您期望许多地址无效,那么抛出和捕获异常的开销可能会影响您的性能

另一个选项是使用
Regex.IsMatch(email,someRegexString)
来确定电子邮件是否匹配某个正则表达式。根据您的电子邮件地址规则是否通用或简单,您可以通过在线搜索找到
someRegexString
的一些选项。如果你的规则足够简单,那么你可能最容易尝试和使用它

如果查找
@
字符的存在性足够好,可以使用
Contains()

string email=row[“email”].ToString();
@if(email.Contains(“@”)){
foreach(Model.Columns中的数据列col)
{
@行[列名称]
}
}

告诉我无效是什么意思?不是电子邮件格式?@valkyrie是的,这正是我的意思编译器认为
email
是类型对象,没有方法
.includes()
。你需要施法或某种转换。可以在视图中进行吗?当然可能不是个好主意。是编程时要记住的一个重要点。即使对于一个简单的程序来说,把东西钉在不该放的地方也是不好的。此外,在您的视图中,我不会使用
DataTable
作为模型。使用强类型对象。它使视图更清晰,减少了出错的可能性。告诉我无效是什么意思?不是电子邮件格式?@valkyrie是的,这正是我的意思编译器认为
email
是类型对象,没有方法
.includes()
。你需要施法或某种转换。可以在视图中进行吗?当然可能不是个好主意。是编程时要记住的一个重要点。即使对于一个简单的程序来说,把东西钉在不该放的地方也是不好的。此外,在您的视图中,我不会使用
DataTable
作为模型。使用强类型对象。它使视图更清晰,减少了出错的可能性。@Jf2k
test@@example.com
是根据发布的算法确定的有效电子邮件地址。
@example.com
examplecom@
也是如此。这是不对的。请记住,在解析常见格式时,最好使用预先构建的格式,如果使用自己的格式,就会出错。即使是像电子邮件地址这样简单的东西也会令人惊讶地复杂。@Jf2kstring email = row["Email"].ToString(); @if (email.Contains("@")) { <tr> foreach (DataColumn col in Model.Columns) { <td>@row[col.ColumnName]</td> } </tr> }