Mvc 4 validation summary errors not displaying

35,302

Solution 1

Try

@Html.ValidationSummary(false)

so that it will not exclude property errors.

OR

Try the method @xurca linked which is to add the model error with an empty key so it is not tied to a specific property.

ModelState.AddModelError(String.Empty, "name is required");

Solution 2

If your @Html.ValidationSummary() call is in a Partial view, DON'T pass data into the partial view like this:

@Html.Partial("_YourForm", Model,  new ViewDataDictionary { { "Submit", true }})

Instead, add the key value pair to Html.ViewData collection first:

@{
    Html.ViewData.Add(new KeyValuePair<string,object>("Submit",true));
}

then call the partial view:

@Html.Partial("_YourForm", Model, Html.ViewData)

this will allow the ModelState to propagate to the partial view properly.

Solution 3

If you custom named your field like

 @Html.TextBoxFor(model => model.Name, new {  id = "staffSearchFilterName", value = "", **Name = "staffSearchFilterName"** })

then you have to use

@Html.ValidationMessage("staffSearchFilterName")
Share:
35,302
WingMan20-10
Author by

WingMan20-10

Updated on July 09, 2022

Comments

  • WingMan20-10
    WingMan20-10 almost 2 years

    I am having trouble displaying validation summary, I only want to display errors in validation summary, not beside the field. In my view i have,

        @Html.ValidationSummary()
        @Html.ValidationMessageFor(m =>m.Name)
    

    in my controller i have

    ModelState.AddModelError("Name",
                                    "name is required");
    

    Am i not supposed to get a validation error message? at the top? I don't get what i am missing...

    I am also including these script files.. jquery.validate.min.js jquery.validate.unobtrusive.min.js

  • Mike_Matthews_II
    Mike_Matthews_II about 9 years
    I'm working on two projects at the same time, VS '12 and VS '13. At any rate, I had no issues in '13 with the default template, but setting TRUE to FALSE solved it for me in the '12 project (as per your post). At any rate, thanks for the post.