[英]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; }
如上所示,我為Required
和DataType
標記設置了不同的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.");
});
您可以在此處閱讀更多相關信息。
在某些情況下,驗證摘要可能是原因:將“全部”更改為“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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.