Question

I have a class as such..

public class TestClass
{
    [DataMember(IsRequired = true)]
    [Required]
    public string Test { get; set; }
    [DataMember(IsRequired = true)]
    [Required]
    public string Test2 { get; set; }
}

I'm basically trying to achieve this with my controller action..

public ActionResult Index(string value1, string value2, TestClass testClass)
{
    if (testClass != null && !ModelState.IsValid)
    {
        //return validation errors
    }
    //continue processing

However due to MVC model binding, TestClass is not null and therefore it's instantiated containing null properties for the strings Test and Test2, which in turn forces it to check the ModelState.IsValid which is of course false.

Can someone point out where I'm going wrong or suggest a better alternative?

EDIT.

I'm checking for a null because the requirement is that value1 and value2 have to be passed into the system, then the TestClass contains extra information on what is being supplied. The extra information isn't required, however it is supplied it needs to be validated.

Was it helpful?

Solution

I think the only solution is to use custom model binding (implement IModelBinder).

This gives you full access over the deserialization of the object.

See this article on SO and Figure 7 from MSDN:

Or maybe you can get in between using an action filter (see section Handling Validation Errors).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top