在ASP.NET MVC中,必需的属性不起作用。

4

我有一个简单的强类型视图。

@model GoldForGold.Models.LogonModel
@{
    ViewBag.Title = "Logins";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Logins
@using (Html.BeginForm()) {

Account Information
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName, new { id = "txtUserName" })
@Html.ValidationMessageFor(m => m.UserName)
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password, new { id = "txtPassword" })
@Html.ValidationMessageFor(m => m.Password)
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(m => m.RememberMe)

<input type="submit" value="Log On" onclick="getcredentials()" />
}

这里是模型代码。

public class LogonModel
{
    [Required(ErrorMessage="please enter username")]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

即使我没有输入用户名和密码,仍然无法看到任何反应。


你能展示一下你的Post动作方法吗? - WannaCSharp
7个回答

36

以下是完整的解决方案:

  1. 将以下脚本添加到您的视图中:

<script src='@Url.Content("~/Scripts/jquery-1.8.2.js")' type='text/javascript'></script>    
<script src='@Url.Content("~/Scripts/jquery.validate.js")' type='text/javascript'>         </script>
<script src='@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")' type='text/javascript'></script>
  • 在 Web.Config 中启用验证:

    <appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    </appSettings>
    
  • 在视图中添加验证元素:

  • @Html.ValidationMessageFor(model => model.UserName)
    
  • 在您的模型元素中添加Required属性。

  • [Required(ErrorMessage="please enter username")]
    public string UserName { get; set; }
    

    9
    对于客户端验证,您需要使用jQuery和jQuery Validation。
    之后,在配置中必须启用客户端验证:
    <appSettings> 
    ...
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    

    对于服务器端验证,您可以使用以下方式检查验证状态:

    ModelState.IsValid;
    

    我已经设置了这些,但提示我检查我的包含文件。我没有包含query.validate.min.js或jquery.validate.unobtrusive.min.js。这是新手错误。 - ransems

    8

    在使用[Required]修饰整型字段时,需要注意的另一件事情不仅仅是在存储数字值时,还包括例如存储下拉列表/选择列表中所选值的id时:

    [Required]在这种情况下将无法工作,因为整型属性永远不可能为null,因此始终具有默认值为零。 [Required]正在检查该属性是否具有值,而零被视为一个值,因此检查将通过。

    在这种情况下,应将属性声明为可空整数:

        [Required]
        public int? LanguageId { get; set; } // note the int is now nullable
    

    或者使用Range属性来阻止零成为可接受的值:

        [Range(1, int.MaxValue)]
        public int LanguageId { get; set; }
    

    1
    非常感谢。这个问题一直困扰着我! - Tiki

    6

    记录一下,您可以在视图末尾包含以下代码,以确保[Required]属性在用户界面中弹出:

    @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
    }
    

    2

    我解决问题的方法是在模型类中使用以下代码。

    using System.ComponentModel.DataAnnotations;
    

    请注意,还有另一个命名空间(Microsoft.Build.Framework)也支持[Required]注释。最初的回答中已经提到了这一点。

    0

    -4
    • 解决方案步骤:

    1- 将脚本添加到视图中:

    <script src='@Url.Content("~/Scripts/jquery-1.8.2.js")' type='text/javascript'></script>       
    <script src='@Url.Content("~/Scripts/jquery.validate.js")' type='text/javascript'>         
    </script>
    <script src='@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")' type='text/javascript'></script>
    

    2- 在 Web.Config 中启用验证:

    <appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    </appSettings>
    

    3- 在视图中添加验证 HTML 帮助程序:

    @Html.ValidationMessageFor(model => model.UserName)
    

    4- 给你的模型元素添加 Required 属性:

    [Required(ErrorMessage="please enter username")]
    public string UserName { get; set; }
    

    4
    你基本上是复制了Vahagn Nahapetyan的答案。 - actaram

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接