Проверяется только тогда, когда пользователь вводит новые данные - PullRequest
1 голос
/ 05 мая 2019

Я просто хочу спросить, можно ли проверить определенные данные в режиме создания, но не в режиме редактирования.

МОДЕЛЬ

public class FileModel
{
    ......
    [Required(ErrorMessage = "You didn't select a file to upload")]
    public IFormFile FileAttachment { get; set; }
}

КОНТРОЛЛЕР

    [HttpPost]
    public async Task<IActionResult> Edit(FileModel file)
        if (ModelState.IsValid)
        {
          .....
        }

ПРОСМОТР

                @{ if (Model.FileID == 0)
                    {
                        <p>Upload new file with this button:</p>
                        <input type="file" asp-for="FileAttachment">
                        <span asp-validation-for="FileAttachment" class="text-danger"></span>
                    }
                }

В основном, если это новая модель (FileID == 0), я хочу, чтобы пользователь выбрал файл.Но если пользователь редактирует выбранный файл.Я не хочу, чтобы он снова загружал файл.

Но приведенный выше код по-прежнему не работает с Model.State, даже когда я прячусь в View.

Как я могу сказать классу модели не требовать, когда идентификатор файла равен 0

Спасибо заранее за помощь.

Ответы [ 2 ]

1 голос
/ 06 мая 2019

В .NET Core вы можете просто создать класс, который наследуется от ValidationAttribute.Вы можете увидеть полную информацию в этом документе .

На основе ваших требований, вы можете создать атрибут как:

public class FileAttribute : ValidationAttribute
{

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        FileModel fileModel = (FileModel)validationContext.ObjectInstance;

        if (fileModel.FileID ==0)
        {
            return new ValidationResult(GetErrorMessage());
        }

        return ValidationResult.Success;
    }

    public string GetErrorMessage()
    {
        return "You didn't select a file to upload";
    }
}

И использовать как:

 [FileAttribute]
 public IFormFile FileAttachment { get; set; }

Также не забудьте включить в форму FileID, чтобы атрибут мог получить значение после отправки формы:

<input type="hidden" asp-for="FileID" />
1 голос
/ 05 мая 2019

Если вы редактируете другие свойства в модели, вы можете создать модель вида только для задействованных свойств.если вы хотите отредактировать файл, вы также должны отправить его в действие.Если файл может быть отредактирован или нет, вы можете проверить, имеет ли значение null значение, перед проверкой model.state

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