簡體   English   中英

MVC .Net Core 模型驗證 - 值 '' 無效。 錯誤

[英]MVC .Net Core Model Validation - The value '' is invalid. Error

我正在嘗試在 MVC .Net Core 中使用模型驗證,但無法替換此默認錯誤消息“值”無效”。

理論上,我們可以通過在Model中使用ErrorMessage Annotation來替換我們自己自定義的錯誤信息。 但我找不到一種方法來使這個工作。

我的模特

[Required(ErrorMessage = "Date Required")]
[DataType(DataType.Date, ErrorMessage = "Invalid Date Format")]                
[Display(Name = "Appointment Date")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime AppointmentDate { get; set; }

如上所示,我為RequiredDataType標記設置了不同的ErrorMessage

我的 html 視圖

    <div class="col-md-2">
        <input class="form-control" asp-for="AppointmentDate">
        <span asp-validation-for="AppointmentDate" class="text-danger"></span>
    </div>

在此處輸入圖片說明

你能幫我解決這個錯誤信息嗎? 謝謝。

為了使您的Required屬性起作用,您需要使字段可以為空:

public DateTime? AppointmentDate { get; set; }

編輯:還要注意DataType屬性實際上並不對字段執行驗證。 post數據綁定到model時,MVC 驗證日期

.NET Core 3 驗證系統更改后。 不可為空的參數被視為具有 [Required] 屬性。 即使您不應用 [Required] 屬性,您也會獲得客戶端驗證。 客戶端 JQuery 驗證接受空字符串字段,但一旦發送到服務器,相同的字段將獲得無效結果。 The value '' is invalid是服務器端驗證的默認錯誤消息。 根據 asp.net 文檔,通過使用 [Required] 屬性,您可以覆蓋此消息,但它不適用於空字段。 不幸的是,此功能為引用不可為空的 int 屬性的隱藏輸入字段生成空字符串值 ("")(即@Html.Hiddenfor(m=>m.id)將為 html 元素生成 ""。) asp.net 文檔中提供的選項最安全的是使屬性可以為空。 另一個不錯的選擇是將 .NET 默認消息更改為其他內容

services.AddRazorPages()
    .AddMvcOptions(options =>
    {
        options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor(
            _ => "The field is required.");
    });

您可以在此處閱讀更多相關信息。

有同樣的問題,但無法檢測到問題。 我在調試模式下檢查了對象,看看是否有任何方法可以查看哪個屬性不符合模型狀態。

模型狀態對象的調試模式視圖

然后我看到哪個失敗的模型。 這是一個映射到復選框的布爾值

奇怪的部分是“這不是必填字段”!

我在使用它時添加了一個問號並使用了 getvalueordefault 方法

public bool? IsCorporateAccount { get; set; }

在某些情況下,驗證摘要可能是原因:將“全部”更改為“ModelOnly”:

<div asp-validation-summary="All" class="text-danger"></div>
<div asp-validation-summary="ModelOnly" class="text-danger"></div>

我的問題是在創建操作中,我會返回視圖而不更新實體,當我更改實體時,即Return View(new MyEntity()); 它解決了這個問題

我的具體問題與顯示類似消息的選擇選項驗證有關,而不是來自模型的自定義消息。 除了關於使驗證的屬性可以為空的答案之外,還要仔細檢查 DOM 元素中的實際值。 我的問題是通過添加可空性和一個空字符串作為默認選項中的值來解決的,默認選項應該是一個 int。

<select asp-for="@Model.Thing" asp-items="Model.Things"
    <option value="" selected>Please select a Thing</option>
</select>
<span asp-validation-for="@Model.Thing" class="text-danger"></span>

在我的場景中,我的模型的“NeedToPrint”屬性出現驗證錯誤。 我必須確保在我的 cshtml 文件中指定了一個 VALUE,如下所示:

 <button type="submit" name="NeedToPrint" value="false" class="btn btn-default" >Submit</button>

在“獲取”操作中,我實例化了對象並將其作為模型傳遞給視圖,即使我沒有對它做任何事情,但現在看來 .Net Core 想要一切完美和干凈,不能使用“舊方法”使用“默認值”。 在此處輸入圖片說明

暫無
暫無

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

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