无法获取MVC 4 FileExtensions属性来处理ViewModel属性

jal*_*wis 8 data-annotations asp.net-mvc-4

我需要上传一个csv文件,我想将它的扩展名限制为.csv

所以我将follow属性添加到我的ViewModel:

[FileExtensions(ErrorMessage = "Must choose .csv file.",Extensions = "csv,txt")]
public HttpPostedFileBase File { get; set; }
Run Code Online (Sandbox Code Playgroud)

在我看来,我有以下几点:

@Html.TextBoxFor(m => m.File, new { type = "file"})
@Html.ValidationMessageFor(m => m.File)
Run Code Online (Sandbox Code Playgroud)

但是,只要它命中我的"ModelState.IsValid"检查它就会返回invalid,并显示错误消息"Must choose .csv file".

我假设我只是错过了一个参数,但我还没有找到任何已经使用的样本.

Joh*_*zer 3

问题是 FileExtensionsAttribute 仅适用于字符串变量。检查 HttpPostedFileBase 变量的文件扩展名的最简单方法是使用这个简单的属性。它解决了我的问题。

唯一的缺点是这个新属性仅在服务器端验证,因此不要忘记使用以下命令检查模型状态:

if (ModelState.IsValid)
{
  // Do the work
}
Run Code Online (Sandbox Code Playgroud)