【问题标题】:required attribute not working in asp.net mvc必需的属性在 asp.net mvc 中不起作用
【发布时间】:2013-11-01 20:09:32
【问题描述】:

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

@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 操作方法吗?

标签: c# asp.net-mvc asp.net-mvc-viewmodel


【解决方案1】:

这里是完整的解决方案:

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

【讨论】:

    【解决方案2】:

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

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

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

    对于服务器端验证,您可以检查您的验证状态:

    ModelState.IsValid;
    

    【讨论】:

    • 我有这些设置,但提示我查看我的包含。没有包含 query.validate.min.js 或 jquery.validate.unobtrusive.min.js。菜鸟错误。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

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

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

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

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

      【讨论】:

      • 非常感谢。一直在搞砸这个!
      【解决方案5】:

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

      using System.ComponentModel.DataAnnotations;
      

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

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:
          • 解决步骤:

          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(ErrorMessage="please enter username")]
          public string UserName { get; set; }
          

          【讨论】:

          • 你基本上复制了 Vahagn Nahapetyan 的回答。
          猜你喜欢
          • 1970-01-01
          • 2021-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-29
          • 1970-01-01
          相关资源
          最近更新 更多