在使用Razor语法的ASP.NET MVC视图中检查电子邮件地址是否有效



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

  • 解析.csv(逗号分隔值)文件。
  • 显示值
  • 排除包含无效电子邮件地址的值

可以纯粹在视图中做到这一点吗?以下是我最佳尝试的代码。但是,我一直遇到以下错误:

编译错误

描述:资源汇编期间发生了错误 需要服务此请求。请查看以下特定 错误的详细信息并适当修改您的源代码。

编译器错误消息:CS1061:"对象"不包含定义 对于"包括",没有扩展方法'包括'接受第一个 可以找到"对象"类型的参数(您是否缺少使用 指令或组装参考?)

@model System.Data.DataTable
@using System.Data;
<h2>Upload File</h2>
@using (Html.BeginForm("Upload", "Home", null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()
    <div class="form-group">
        <input type="file" id="dataFile" name="upload" />
    </div>
    <div class="form-group">
        <input type="submit" value="Upload" class="btn btn-default" />
    </div>
    if (Model != null)
    {
        <table>
            <thead>
                <tr>
                    @foreach (DataColumn col in Model.Columns)
                    {
                        <th>@col.ColumnName</th>
                    }
                </tr>
            </thead>
            <tbody>
                @foreach (DataRow row in Model.Rows)
                {   
                    var email = row["Email"];
                    <tr >
                        @if (email.includes("@")) {
                        foreach (DataColumn col in Model.Columns)
                        {
                            <td>@row[col.ColumnName]</td>
                        }
                        }
                    </tr>

                }
            </tbody>
        </table>
    }
}

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

话虽如此,我知道有几种方法可以验证电子邮件地址。第一个是使用system.net.mail.mailaddress类构造函数,如果电子邮件地址不具有有效的格式,它将投掷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("@")) {
    <tr>
    foreach (DataColumn col in Model.Columns)
    {
        <td>@row[col.ColumnName]</td>
    }
    </tr>
}

最新更新