在ASP.. NET MVC,我如何检查一个属性是否有错误
本文关键字:ASP 一个 属性 有错误 是否 检查 MVC 何检查 NET | 更新日期: 2023-09-27 18:18:10
我在MVC5中得到了以下一点Razor代码。
<div class="form-group">
<label class="control-label">Name</label>
@Html.TextBoxFor(m => m.Name)
</div>
我现在要确保,如果Name
有一个错误,表单组div得到一个has-error
类。如何检查Name属性是否有错误?
编辑:根据要求,这里是我正在使用的视图的更完整的版本。
@model CaptchaMvc.Models.DefaultBuildInfoModel
<div class="form-group">
@Html.LabelFor(m => m.InputElementId, "Retype the characters in the image", new { @class = "control-label", @for = "CaptchaInputText" })
<div class="input-group">
<span style="padding:0;overflow:hidden;" class="input-group-addon">
@Html.Hidden(Model.TokenElementId, Model.TokenValue)
<img style="margin:-12px" id="@Model.ImageElementId" src="@Model.ImageUrl" alt="Captcha Text" />
</span>
@Html.TextBox(Model.InputElementId, null, new Dictionary<string, object>
{
{"data-val", "true"},
{"data-val-required", Model.RequiredMessage},
{"class", "form-control"},
{"style", "width: 200px;"},
{"placeholder", "Retype captcha"}
})
</div>
</div>
这是一个与CaptchaMvc一起使用的局部视图。它以以下方式包含在表单中。
@Html.Captcha(6, "_Captcha")
一个非常简单的服务器端检查字段错误的方法是:
@ViewData.ModelState.IsValidField("Name")
返回true/false
,具体取决于Name字段是否有与之相关的错误。
@{
var nameHasError = Html.ValidationMessageFor(x => x.Name) != null && !string.IsNullOrEmpty(Html.ValidationMessageFor(x => x.Name).ToString());
}
@if(ViewData.ModelState.IsValidField(nameof(Model.Property)))
{
// Do some thing
}
else
{
// Do some thing else
}
假设你已经在使用Unobtrusive Validation插件,你可以用一个启动插件来扩展它:
https://github.com/sandrocaseiro/jquery.validate.unobtrusive.bootstrap或通过NuGet:
https://www.nuget.org/packages/jquery.validate.unobtrusive.bootstrap/一旦加载,一切都应该自动进行。只要确保库按照正确的顺序加载:
<script src="/path/to/jquery"></script>
<script src="bootstrap.min.js"></script>
<script src="jquery.validate.min.js"></script>
<script src="jquery.validate.unobtrusive.min.js"></script>
<script src="jquery.validate.unobtrusive.bootstrap.min.js"></script>
值得注意的是,只有当你的模型有正确的注释时,客户端验证才有效;下面是一个例子:
public class CommentFormModel
{
public int ID { get; set; }
[Display(Name = "Your name")]
[Required(AllowEmptyStrings = false, ErrorMessage = "This field is required.")]
public string Name { get; set; }
[Display(Name = "Your email? (optional)"), DataType(DataType.EmailAddress)]
public string Email { get; set; }
[AllowHtml]
[Display(Name = "Content")]
[Required(AllowEmptyStrings = false, ErrorMessage = "This field is required.")]
public string Content { get; set; }
}
您需要在模型中使用DataAnnotations才能使其工作。
下面的链接中有一个类似实现的描述:
http://www.c-sharpcorner.com/UploadFile/ff2f08/validation-using-data-annotation-to-custom-model-or-class/Html.ViewContext.ModelState[fieldname].ValidationState