Как проверить входной файл с помощью jquery и dataannotation в asp.net MVC 3 - PullRequest
8 голосов
/ 09 июня 2011

Я уверен, что что-то здесь отсутствует, я нашел этот вопрос для проверки файла, вот пример кода

public class UpdateSomethingViewModel 
{
    [DisplayName("evidence")]
    [Required(ErrorMessage="You must provide evidence")]
    [RegularExpression(@"^abc123.jpg$", ErrorMessage="Stuff and nonsense")]
    public HttpPostedFileBase Evidence { get; set; }
}

но я не вижу @Html.FileFor(model => model.Evidence)

Есть идеи?

Обновление

Я нашел простое решение, передающее тип атрибута в коллекции атрибутов html.

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

Ответы [ 2 ]

13 голосов
/ 09 июня 2011

Я нашел простое решение, передающее атрибут type в коллекции атрибутов html.

@Html.TextBoxFor(model => model.Evidence, new { type = "file" })
@Html.ValidationMessageFor(model => model.Evidence)
3 голосов
/ 09 июня 2011

Боюсь, вы не можете сделать это, используя аннотации данных.Вы можете сделать это в действии контроллера, которое должно обрабатывать запрос:

Модель:

public class UpdateSomethingViewModel 
{
    [DisplayName("evidence")]
    [Required(ErrorMessage = "You must provide evidence")]
    public HttpPostedFileBase Evidence { get; set; }
}

Действие:

[HttpPost]
public ActionResult Foo(UpdateSomethingViewModel model)
{
    if (model.Evidence != null && model.Evidence.ContentLength > 0)
    {
        // the user uploaded a file => validate the name stored
        // in model.Evidence.FileName using your regex and if invalid return a
        // model state error
        if (!Regex.IsMatch(model.Evidence.FileName, @"^abc123.jpg$"))
        {
            ModelState.AddModelError("Evidence", "Stuff and nonsense");
        }
    }
    ...
}

Также обратите внимание, что это лучшеиспользовать HttpPostedFileBase вместо конкретного HttpPostedFileWrapper типа в вашей модели.Это облегчит вашу жизнь, когда вы будете писать модульные тесты для этого действия контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...