gdoron gdoron - 3 months ago 21
C# Question

Testing ModelState is always valid in asp.net mvc

When testing my controller's actions the ModelState is always valid.

public class Product
{
public int Id { get; set; }

[Required]
[StringLength(10)]
public string Name { get; set; }

[Required]
public string Description { get; set; }

[Required]
public decimal Price { get; set; }
}


And my controller.

public class ProductController : Controller
{
[HttpPost]
public ActionResult Create(Product product)
{
if (ModelState.IsValid)
{
// Do some creating logic...
return RedirectToAction("Display");
}

return View(product);
}
}


And test:

[Test]
public TestInvalidProduct()
{
var product = new Product();
var controller = new ProductController();
controller.Create(product);
//controller.ModelState.IsValid == true
}


Why the modelState is valid when the product doesn't have a name, Description and price?

Answer

Validation happens when the posted data is bound to the view model. The view model is then passed into the controller. You are skipping part 1 and passing a view model straight into a controller.

You can manually validate a view model using

System.ComponentModel.DataAnnotations.Validator.TryValidateObject()
Comments