【问题标题】:Can't get MVC 4 FileExtensions Attribute to work on ViewModel property无法让 MVC 4 FileExtensions 属性在 ViewModel 属性上工作
【发布时间】:2013-02-05 22:45:26
【问题描述】:

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

所以我在 ViewModel 中添加了以下属性:

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

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

@Html.TextBoxFor(m => m.File, new { type = "file"})
@Html.ValidationMessageFor(m => m.File)

但是,一旦它点击我的“ModelState.IsValid”检查,它就会返回无效,并显示我的错误消息“必须选择 .csv 文件”。

我假设我只是缺少一个参数,但我还没有在任何地方找到这个使用的示例。

【问题讨论】:

  • 如何在视图中使用文本框上传文件?因为我从来没有那样尝试过。我用<input type="file".. 来做到这一点
  • @Karthik Fair 问题。当它生成 html 时,您会得到 <input type="file" 并且该部分有效。如果我删除验证约束,文件将按预期上传。
  • FileExtensions 属性是什么?它来自哪里?这不是 ASP.NET MVC 内置的东西。
  • @DarinDimitrov 这是 .net 4.5 msdn 中的一个新属性,它似乎不适用于 MVC:stackoverflow.com/questions/8536589/…
  • @nemesv,好点子。我不知道那个属性。投票以重复结束。

标签: asp.net-mvc-4 data-annotations


【解决方案1】:

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

唯一的缺点是这个新属性只在服务器端验证,所以不要忘记检查模型状态:

if (ModelState.IsValid)
{
  // Do the work
}

【讨论】:

    猜你喜欢
    • 2015-09-30
    • 2012-03-09
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    相关资源
    最近更新 更多