我有一个简单的强类型视图。
@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; }
}
即使我没有输入用户名和密码,我也看不到任何事情发生。
答案 0 :(得分:31)
以下是完整的解决方案:
将以下脚本添加到您的视图中:
<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(ErrorMessage="please enter username")]
public string UserName { get; set; }
答案 1 :(得分:6)
对于客户端验证,您需要jquery和jquery验证。
之后必须在config中启用客户端验证:
<appSettings>
...
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
对于服务器端验证,您可以使用以下方法检查验证状态:
ModelState.IsValid;
答案 2 :(得分:4)
对于记录,您可以在视图末尾包含以下代码,以确保在用户界面中弹出[Required]
属性:
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
答案 3 :(得分:2)
使用[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; }
答案 4 :(得分:1)
我解决问题的方法是在模型类中使用这一行代码。
@media only print {
html, body, table{ font-family: "Times New Roman", Times, serif; }
body {
display: none;
}
table.print_to_passbook{
margin: 100px;
}
请注意,还有另一个名称空间(Microsoft.Build.Framework)也支持[Required]注释。
答案 5 :(得分:0)
jquery.validate.js / jquery.validate.unobtrusive.js包含在您的项目中?很奇怪,你的代码对我来说很好。
答案 6 :(得分:0)
就我而言,这是因为我没有安装软件包Microsoft.jQuery.Unobstrusive.Validation
安装并运行WebApp后,它就可以正常工作。
答案 7 :(得分:-5)
1-添加要查看的脚本:
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
2-在Web.Config中启用验证:
@Html.ValidationMessageFor(model => model.UserName)
3-在视图中添加验证html帮助器:
[Required(ErrorMessage="please enter username")]
public string UserName { get; set; }
4-为模型元素添加必需属性:
.postThumbnailGhost