ASP.NEt MVC 2 RC 2中的模型验证问题

时间:2010-02-16 11:31:31

标签: asp.net-mvc validation model

更新后我遇到以下问题。

我有一个带有类级别验证的模型以及其中的属性级别验证。更新到MVC 2 RC 2.模型验证在模型绑定上失败。我真正理解的是,当你第一次请求它或者在GET上说它时,尝试验证模型的新机制在tryvalidatemodel模型绑定调用期间它会得到空对象异常。

我的模型如下所示

[Serializable]    
[MetadataType(typeof(InterestClaimMetaData))] //metadata with all properties level validation

//these validations fails when you request a page.
[DateComparison("DateA", "DateB", eDateComparitor.GreaterThan, 
    ErrorMessage = "Date A must be greater than B Date")]

[MutuallyExclusive("A", "B", ErrorMessage = "Please select either A or B field")]   

public class IE {
    public int ID { get; set; }
    public byte[] Updated { get; set; }
}

DataComparison和MutuallyExclusive会覆盖验证功能无效并检查验证,但它无法尝试按首次请求进行验证。 不知道如何阻止这种情况发生,因为它不应该在获取请求上验证模型;只需附上属性。

只有没有这些级别验证的模型才有效。

请指教。 感谢

1 个答案:

答案 0 :(得分:0)

将控制器中的操作方法分为两种操作方法。将一个标记为GET,将另一个标记为POST。然后仅在POST方法中应用验证。因此,例如,如果您当前有一个名为Create的方法,看起来像这样......

public ActionResult Create(YourModel yourModel)
{
    // Some code in here to validate stuff
    // Some code in here to do stuff
    return RedirectToAction("Index");
}

将其拆分为两个类似的方法......

[HttpGet]
public ActionResult Create()
{
    return View();
} 

[HttpPost]
public ActionResult Create(YourModel yourModel)
{
    try
    {
        // Some code in here to validate stuff
        // Some code in here to do stuff
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}