我正在尝试在MVC .Net Core中使用模型验证,并且无法管理替换此默认错误消息“值''无效'。
理论上,我们可以通过在模型中使用Insert Table
(C1, C2, Pos)
Select 'C1', 'C2', Max(Pos) + 1
From Table
注释来替换我们自己的自定义错误消息。但我找不到办法使这个工作。
我的模特
ErrorMessage
我为[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; }
和ErrorMessage
标记添加了不同的Required
,如上所示。
我的HTML视图
DataType
您能帮我解决一下如何更换错误信息吗?感谢。
答案 0 :(得分:14)
为了使Required
属性正常工作,您需要将字段设为可为空:
public DateTime? AppointmentDate { get; set; }
修改:还请注意DataType
属性实际上不对字段执行验证。 MVC验证从post
数据到model
答案 1 :(得分:4)
.NET Core 3验证系统更改后。非空参数被视为具有[Required]属性。即使您不应用[Required]属性,也可以获得客户端验证。
客户端JQuery验证接受空字符串字段,但是一旦发送到服务器,则同一字段将获得无效结果。 The value '' is invalid
是服务器端验证的默认错误消息。
根据asp.net docs的使用[Required]属性,您可以覆盖此消息,但它不适用于空白字段。
不幸的是,此功能为引用非空int属性的隐藏输入字段生成空字符串值(“”)(即@Html.Hiddenfor(m=>m.id)
将为html元素生成“”。)
因此,在asp.net docs中提供的所有选项中,最安全的选择是使该属性可为空。另一个不错的选择是将.NET默认消息更改为其他内容
services.AddRazorPages()
.AddMvcOptions(options =>
{
options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor(
_ => "The field is required.");
});
您可以阅读有关此here的更多信息。
答案 2 :(得分:0)
我的问题是,在创建操作中,我在没有新建实体的情况下返回视图,当我更改实体时,即Return View(new MyEntity());
它修复了问题
答案 3 :(得分:0)
有相同的问题,但无法检测到问题。我在调试模式下检查了对象,以查看是否有任何方法可以查看哪个属性使模型状态失败。
然后我看到哪个模型失败。 这是一个布尔值,它映射到一个复选框
奇怪的部分是“这不是必填字段”!
我添加了一个问号,并在使用它时使用了getvalueordefault方法
public bool? IsCorporateAccount { get; set; }
答案 4 :(得分:0)
我的具体问题与选择选项验证有关,该选项显示类似的消息,而不是模型中的自定义消息。除了关于使validated属性可为空的答案之外,还要仔细检查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>
答案 5 :(得分:0)
在某些情况下,验证摘要可能是原因: 将“全部”更改为“仅模型”:
<div asp-validation-summary="All" class="text-danger"></div>
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
答案 6 :(得分:0)
在我的场景中,我的模型的“ NeedToPrint”属性出现验证错误。我必须确保这样在cshtml文件中指定了一个值:
<button type="submit" name="NeedToPrint" value="false" class="btn btn-default" >Submit</button>