Search code examples
asp.netasp.net-mvc-3entity-frameworkvalidationserver-side-validation

Why isn't server side validation working in my ASP.Net MVC3 application with Entity Framework?


I have an ASP.NET MVC3 application that uses entities generated from a database. Each entity has also has a separate partial class that uses the MetadataType attribute to associate each entity with a class that is decorated with a number of validation attributes (see below).

[MetadataType(typeof(Drawing.Metadata))]
public partial class Drawing
{
    private sealed class Metadata
    {
        [Required]
        [StringLength(50, MinimumLength = 3, ErrorMessage = "Drawing numbers must be between {2} and {1} characters in length.")]
        [DisplayName("Drawing number")]
        public string Number { get; set; }

        [Required]
        [StringLength(255, MinimumLength = 3, ErrorMessage = "Drawing titles must be between {2} and {1} characters in length.")]
        public string Title { get; set; }
    }
}

My controller code looks like this:

[HttpPost]
public ActionResult Create(Drawing drawing)
{
    if (ModelState.IsValid)
    {
        // Save to database here...
        return RedirectToAction("Index");
    }
    else
    {
        return View(drawing);
    }
}

I have used the Visual Studio templates to create the views to add, edit and delete the entities (The designer code has not been altered).

The problem I am having is that when I create an entity, validation only works if I have client side validation enabled. If I turn off the client side validation then ModelState.IsValid always seems to return true and returns me to the index page.

Can anyone provide any suggestions on how to get server side validation working with Entity Framework entities?

UPDATE:

It seems this question is similar to mine. The author of this post seems to have solved the problem but rather unhelpfully omitted to mention how they fixed the problem...


Solution

  • I found another solution to this problem. Because I didn't really want to set my properties to nullable I added the following:

    [DisplayFormat(ConvertEmptyStringToNull = false)]
    

    Adding the following annotation to your model property fixes the error as well.