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

时间:2016-12-28 23:04:36

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我的任务是创建一个应用程序:

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

是否可以在视图中完全执行此操作?我在该视图中最佳尝试的代码如下。但是,我一直收到以下错误:

  

编译错误

     

描述:编译资源期间发生错误   需要为此请求提供服务。请查看以下具体内容   错误详细信息并适当修改源代码。

     

编译器错误消息:CS1061:'object'不包含定义   对于'包含'并且没有扩展方法'包括'接受第一个   可以找到“对象”类型的参数(你是否错过了使用   指令或程序集引用?)

@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>
    }
}

1 个答案:

答案 0 :(得分:3)

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

话虽如此,我知道有几种方法可以验证电子邮件地址。第一个是使用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可能看起来的一些选项。如果您的规则足够简单,最简单的尝试build your own

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

string email = row["Email"].ToString();
@if (email.Contains("@")) {
    <tr>
    foreach (DataColumn col in Model.Columns)
    {
        <td>@row[col.ColumnName]</td>
    }
    </tr>
}