0

当我将“模型”对象(由 LinqToSQL 生成)发布到控制器时,我可以查询“ModelState.IsValid”,如果任何属性上有验证属性并且值未验证,它将被设置为“假”。

但是,如果我发布我自己的类的自定义对象,ModelState.IsValid 似乎总是返回“true”,即使该类的属性具有验证属性并且被赋予了不正确的值。

为什么这只适用于 DataContext 模型对象?这些对象是什么使它们与 ModelState.IsValid 一起工作,而普通类却不能?

我怎样才能使它与普通课程一起工作?


控制器代码:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogIn(MyProject.Website.ViewModels.Shared.LogIn model)
{
    if (ModelState.IsValid)
        return View(model);

    // ... code to log in the user
}

视图模型代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using MyProject.Website.Validators;
using System.ComponentModel;

public class LogIn
{

    public LogInModes LogInMode { get; set; }

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

    public string Password { get; set; }

    public bool RememberMe { get; set; }

    public string ReturnUrl { get; set; }

}
4

2 回答 2

1

如果您的文件是这样的,您是否已将其设置DataAnnotationsModelBinder为默认模型绑定器?Application_StartGlobal.asax

protected void Application_Start() {
    ModelBinders.Binders.DefaultBinder = new DataAnnotationsModelBinder();
}

因为据我所知,System.ComponentModel.DataAnnotationsnamescape 下的属性仅适用于该模型绑定器。

您还可以仅为该操作设置模型绑定器:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogIn( [ModelBinder(typeof(DataAnnotationsModelBinder))]
    Yieldbroker.Website.ViewModels.Shared.LogIn model) {
    //...
}

请参阅此博客文章和此问题

于 2009-07-25T14:05:04.767 回答
0

你不应该试试 if (model.IsValid()) 吗?

编辑:抱歉,这将需要从 Model 类继承的 Login 类。

于 2009-07-25T13:46:27.927 回答