簡體   English   中英

僅在用戶輸入新數據時驗證

[英]Validate only when user enters new data

我只想問一下是否可以在創建模式下而不是在編輯模式下驗證特定數據。

模型

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中也是如此。

我如何告訴Model類在文件ID為0時不需要

感謝您的幫助。

如果您正在編輯模型中的其他屬性,則可以僅為涉及的屬性創建視圖模型。 如果要編輯文件,則也應將其發送到操作。 如果文件無法編輯,則可以在model.state檢查之前檢查是否為null

在.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" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM