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.

有帮助吗?

解决方案

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).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top