我的任务是制作一个应用程序:
- 解析.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>
}