【发布时间】:2013-03-12 19:05:07
【问题描述】:
在我的课堂上,我有一个文件附件的属性,像这样......
public class Certificate {
[Required]
// TODO: Wow looks like there's a problem with using regex in MVC 4, this does not work!
[RegularExpression(@"^.*\.(xlsx|xls|XLSX|XLS)$", ErrorMessage = "Only Excel files (*.xls, *.xlsx) files are accepted")]
public string AttachmentTrace { get; set; }
}
我看不出我的正则表达式有什么问题,但我总是得到 ModelState.IsValid 错误。这似乎非常简单和简单的正则表达式,我错过了什么吗?我需要编写自己的自定义验证吗?
我正在通过文件类型的常规输入填充 AttachmentTrace:
<div class="editor-label">
@Html.LabelFor(model => model.AttachmentTrace)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.AttachmentTrace, new { type = "file" })
@Html.ValidationMessageFor(model => model.AttachmentTrace)
</div>
action 方法只是一个常规动作:
public ActionResult Create(Certificate certificate, HttpPostedFileBase attachmentTrace, HttpPostedFileBase attachmentEmail)
{
if (ModelState.IsValid)
{
// code ...
}
return View(certificate);
}
【问题讨论】:
-
如何填充 AttachmentTrace?
-
四十二,我通过文件类型的常规输入来填充它(只是在上面添加了一些代码)。谢谢。
-
好吧,你这样做的方式我猜 AttachmentTrace 的值不是你所期望的(文件名),而是类似于“System.Web.HttpPostedFileWrapper”的东西。
-
你的 Action 方法是什么样的?
-
您可以将该扩展位简化为
[xX][lL][sS][xX]?,或者更好的是,使用内联不区分大小写的修饰符:(?i)^.*\.xlsx?$。
标签: regex asp.net-mvc-4 automapper model-validation custom-validators