在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")

在ASP.. NET MVC,我如何检查一个属性是否有错误

一个非常简单的服务器端检查字段错误的方法是:

@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