MVC .Net Core Model Validation - The value '' is invalid. Error
Solution 1
In order to make your Required
attribute works you need to make field nullable:
public DateTime? AppointmentDate { get; set; }
Edit: also note that DataType
attribute actually doesn't perform validation on field. MVC validate date when applying binding from post
data to model
Solution 2
After .NET Core 3 validation system changed. Non-nullable parameters are treated as if they had a [Required] attribute. You get client side validation even if you don't apply the [Required] attribute.
Client side JQuery validation accepts empty strings fields but once sent to server the same field will get the invalid result. The value '' is invalid
is the default error message for server side validation.
According to asp.net docs by using a [Required] attribute you can override this message but it does not apply to empty fields.
Unfortunately this feature generates empty string values ("") for hidden input fields that reference non-nullable int properties (i.e @Html.Hiddenfor(m=>m.id)
would generate "" for the html element.)
So out of all the options provided in asp.net docs the safest one is making the property nullable. another good option is changing .NET default message to something else
services.AddRazorPages()
.AddMvcOptions(options =>
{
options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor(
_ => "The field is required.");
});
You can read more about this here.
Solution 3
Having the same problem but cannot detect the problem. I checked the object in debug mode to see if is there any way to see which property fails the model state.
Then I see the which one fails model. That is a boolean value which maps to a checkbox
Weird part is "this is not a Required field"!
I added a question mark and used getvalueordefault method when using it
public bool? IsCorporateAccount { get; set; }
Solution 4
In some case the validation summary can be the cause: Change the "All" for "ModelOnly":
<div asp-validation-summary="All" class="text-danger"></div>
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
TTCG
Updated on December 06, 2021Comments
-
TTCG over 2 years
I am trying to use Model Validation in MVC .Net Core and can't manage to replace this default error message 'The value '' is invalid'.
In theory, we can replace our own custom error message by using
ErrorMessage
Annotation in the Model. But I couldn't find a way to make this one work.My Model
[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; }
I put different
ErrorMessage
for bothRequired
andDataType
tag as shown in the above.My html view
<div class="col-md-2"> <input class="form-control" asp-for="AppointmentDate"> <span asp-validation-for="AppointmentDate" class="text-danger"></span> </div>
Could you please help me how I could get that error message replaced? Thanks.
-
MikeT about 6 yearsI'm getting the same problem, however, the only fields I have
[Required]
on are strings. And, I have the same Controller action for both adding and editing an entity. When editing, it works fine (before I do anything in the controller, i checkModelState
), but trips this when adding a new entity. Everything is the exact same on the entity -
Pedro Galinatti about 4 yearsI had the same problem, the difference is that my property has Guid type. Make it nullable solved the problem.
-
pianocomposer over 2 yearsPerfect! Thanks. :)
-
OL. almost 2 yearsthis one was most useful for me