Próbuję przesłać plik przy użyciu kontrolki HTML FileUpload w MVC. Chcę zweryfikować plik, aby zaakceptować tylko określone rozszerzenia. Próbowałem użyć atrybutu FileExtensions przestrzeni nazw DataAnnotations, ale nie działa. Zobacz poniższy kod -Atrybut FileExtensions z DataAnnotations nie działa w MVC
public class FileUploadModel
{
[Required, FileExtensions(Extensions = (".xlsx,.xls"), ErrorMessage = "Please select an Excel file.")]
public HttpPostedFileBase File { get; set; }
}
w sterowniku, piszę kod jak poniżej -
[HttpPost]
public ActionResult Index(FileUploadModel fileUploadModel)
{
if (ModelState.IsValid)
fileUploadModel.File.SaveAs(Path.Combine(Server.MapPath("~/UploadedFiles"), Path.GetFileName(fileUploadModel.File.FileName)));
return View();
}
na uwadze, pisałem poniżej kodu -
@using (Html.BeginForm("Index", "FileParse", FormMethod.Post, new { enctype = "multipart/form-data"}))
{
@Html.Label("Upload Student Excel:")
<input type="file" name="file" id="file"/>
<input type="submit" value="Import"/>
@Html.ValidationMessageFor(m => m.File)
}
gdy uruchomię aplikacji i podać nieprawidłowe rozszerzenie pliku, nie wyświetlając mi komunikatu o błędzie. Jestem świadomy rozwiązania, aby napisać niestandardowy atrybut sprawdzania poprawności, ale nie chcę używać niestandardowego atrybutu. Proszę wskazać, gdzie idę źle.
mogą być pomocne: http://stackoverflow.com/questions/14718425/cant-get-mvc-4-fileextensions-attribute-to-work-on-viewmodel-property – serhiyb
@serhiyb Dzięki za odpowiedź. Przeszedłem przez to rozwiązanie. Ale nie chcę używać niestandardowego atrybutu, chcę użyć atrybutu, który jest już dostarczany przez .NET. Czy robię coś złego, czy jest jakiś problem z atrybutem dostarczonym przez Microsoft? – DfrDkn
Ponieważ atrybut FileExtensions działa poprawnie w MVC5 (właśnie testowałem) zakładam, że jest problem z nim w niższych wersjach. – serhiyb