在ASP.NET MVC中,如何检查属性是否有错误?

Lay*_*way 5 c# asp.net-mvc razor

我在MVC5中有以下一点Razor代码.

<div class="form-group">
    <label class="control-label">Name</label>
    @Html.TextBoxFor(m => m.Name)
</div>
Run Code Online (Sandbox Code Playgroud)

我现在想确保如果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>
Run Code Online (Sandbox Code Playgroud)

这是与CaptchaMvc一起使用的部分视图.它以下列方式包含在表单中.

@Html.Captcha(6, "_Captcha")
Run Code Online (Sandbox Code Playgroud)

Xen*_*ing 9

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

@ViewData.ModelState.IsValidField("Name")

返回true/false,具体取决于Name字段是否具有与之相关的错误.

编辑:

@{ 
    var nameHasError = Html.ValidationMessageFor(x => x.Name) != null && !string.IsNullOrEmpty(Html.ValidationMessageFor(x => x.Name).ToString());
}
Run Code Online (Sandbox Code Playgroud)


Tie*_* T. 0

假设您已经在使用 Unobtrusive Validation 插件,您可以使用支持 Bootstrap 的插件来扩展它:

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>
Run Code Online (Sandbox Code Playgroud)

值得注意的是,只有当您的模型具有正确的注释时,客户端验证才有效;这是一个例子:

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; }
}
Run Code Online (Sandbox Code Playgroud)