4

我有这个LoginControllerLoginModel能够提供对字符串长度和必填字段的验证。这在剃刀页面中显示得很好。

public class LoginController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Index(LoginModel model)
    {
        if (ModelState.IsValid)
        {
            if (Membership.ValidateUser(model.Username, model.Password))
            {
                FormsAuthentication.SetAuthCookie(model.Username, model.NotPublicPc);
                var url = FormsAuthentication.GetRedirectUrl(model.Username, model.NotPublicPc);
                return Redirect(url);
            }
            else
            {
                //here I want to throw my own validation message or otherwise
                //give feedback that the login was unsuccessful
            }
        }
        return View();
    }
}

public class LoginModel
{
    [Required]
    [StringLength(50, MinimumLength = 4)]
    public string Username { get; set; }

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

    [Display(Name = "Keep me logged in - do not check on public computer")]
    public bool NotPublicPc { get; set; }
}

如何抛出我自己的验证错误 - 即我想在登录失败时显示一条消息。虽然我现在很欣赏在浏览器中完成所需和长度的验证,但这是不同的。

我试过投掷ExceptionSystem.ComponentModel.DataAnnotations.ValidationException

4

4 回答 4

2

如果您抛出未处理的异常,客户端将收到 http 500 错误(除非您抛出HttpException并指定错误号)。如果这是可取的,那么这就是你可以做的。否则,您可以尝试向模型状态添加错误消息:

ModelState.AddModelError("PropertyName", "Error Message"); 
于 2013-08-07T15:15:30.433 回答
1

这是我在 ASP.NET MVC 中的“学期”示例字段的一些代码:

[Display(Name = "Semester:"), Required(ErrorMessage = "Please fill in the Semester of the Issue"), StringLength(25)]

如果该字段为空,这将特别抛出错误消息。

如果您愿意,还可以添加正则表达式。IE:

 [RegularExpression(@"^http(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$", ErrorMessage = "Link format is wrong")]

此代码将检查以确保 URL 的格式正确。

这应该非常接近您正在寻找的内容,但如果不是,我很乐意删除我的答案。

于 2013-08-07T15:13:58.410 回答
1

你可以做类似的事情

ModelState.AddModelError(string key, string errorMessage);
于 2013-08-07T15:14:23.963 回答
1

您可以添加自定义错误:

ModelState.AddModelError(String.Empty, "YOUR ERROR");

这将添加一个带有文本“YOUR ERROR”且没有关联属性的错误,这意味着它只会显示在验证摘要中。如果您添加属性名称而不是String.Empty它应该显示为该属性的错误。

您也可以将异常作为第二个参数传递,但我从未使用过,所以我不知道输出将是什么......

于 2013-08-07T15:15:23.163 回答