1

现在要疯了。我有一个 MVC 解决方案,我已经从 MVC 1 升级到 2。一切正常......除了验证!

这是一些代码:

在控制器中:

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Security.Principal;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using System.Web.UI;
using MF.Services.Authentication;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace MF.Controllers
{
     //basic viewmodel
     public class LogOnViewData
     {
     [Required]
     public string UserName { get; set; }

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

    [HandleError]
public class AccountController : Controller
{
         [HttpPost]
         public ActionResult LogOn(LogOnViewData lvd, string returnUrl)
         {

         if (ModelState.IsValid)
         {
        //do stuff - IsValid is always true
         }
         }
    }
}

ModelState 始终有效。但是,该模型已正确填充。因此,如果我将用户名和密码都留空,并发布表单,模型状态仍然有效。啊!

额外信息:使用 IoD 的结构图。以前,在升级到 MVC 2 之前使用 MS 数据注释库,所以在我的 global.asax.cs 中有这个: ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();

现在已经删除了。

我确定我在做一些非常基本和错误的事情。如果有人能指出这将是了不起的。干杯

4

1 回答 1

0

在 MVC2 开发的中途,他们从输入验证到模型验证,在所有情况下都应该完全验证您的对象。确保您使用的是最新版本 (RTM)。

但是,[Required]仅表示该属性不得为null。不幸的是,String.Empty- 这是字符串的默认值 - 不是null,因此模型验证将通过空字符串。

有关重要细节,请参阅Brad Wilson 的这篇文章

作为一种解决方案,您可以使用[RegularExpression("....")]对最小字符串长度和允许的字符施加限制。

于 2010-03-18T17:44:23.367 回答