【问题标题】:MVC 2 Data annotations problemMVC 2 数据注释问题
【发布时间】:2010-03-18 17:28:30
【问题描述】:

现在要疯了。我有一个 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();

现在已经删除了。

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

【问题讨论】:

    标签: asp.net-mvc data-annotations modelstate


    【解决方案1】:

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

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

    this post by Brad Wilson for important details

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

    【讨论】:

    • 哦,我明白了 - 谢谢。这确实很有意义:) 但是,我已经开始了一个全新的 MVC 项目,它对登录控制操作进行了验证,这与我的几乎完全相同。当然,它工作得很好。我只是有点困惑有什么区别!再次感谢
    • 修复了!删除然后重新添加了我的网络项目中的所有引用,一切都按预期工作。
    猜你喜欢
    • 2011-12-23
    • 2017-10-27
    • 1970-01-01
    • 2017-03-04
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多