繁体   English   中英

必需属性在 asp.net mvc 中不起作用

[英]required attribute not working in asp.net mvc

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

@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; }
}

即使我没有输入用户名和密码,我也看不到任何事情发生。

这是完整的解决方案:

  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.ValidationMessageFor(model => model.UserName)
  4. 向您的模型元素添加必需属性。

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

对于客户端验证,您需要 jquery 和 jquery 验证。

之后必须在配置中启用客户端验证:

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

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

ModelState.IsValid;

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

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

使用[Required]另一件事是在整数字段上使用它时,不仅在存储数值时,而且在存储下拉/选择列表的选定值的 id 时。

[Required]在这种情况下不起作用,因为整数属性永远不能为空,因此默认值始终为零。 [Required]正在检查该属性是否有值,零被认为是一个值,因此检查将通过。

在这种情况下,要么将该属性声明为空的整数:

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

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

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

我对我的问题的解决方法是在模型类中使用这行代码。

using System.ComponentModel.DataAnnotations;

请注意,还有另一个命名空间 (Microsoft.Build.Framework) 也支持 [Required] 注释。

就我而言,这是因为我没有安装Microsoft.jQuery.Unobstrusive.Validation

安装并运行 WebApp 后,它就可以工作了。

  • 解决步骤:

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; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM