如何获得MVC3模型验证的真或假输出

本文关键字:输出 验证 何获得 MVC3 模型 | 更新日期: 2023-09-27 18:12:35

我使用一个表单来发布信息,我的模型内置了验证。我知道我可以通过使用以下任意一个来验证字段:

@Html.ValidationSummary() //To validate all fields
@Html.ValidationMessageFor(x => x.FirstName) //To validate single field

这两个方法都只是返回一个HTML列表(For ValidationSummary)或一个span (ValidateionMessageFor)。

我想做的是得到一个真或假的声明,如果字段是有效的或不(或null,如果没有),这样我就可以做一些自定义的样式框,包含输入,甚至标签为它。

有没有人知道是否有这样的代码可以做到这一点,比如@Html.IsValid(x => x.FirstName)

这是我的模型和视图。模型正在正确地通过和验证,这只是一个问题,我是否可以得到一个布尔值而不是HTML字符串。

模型:

using System.ComponentModel.DataAnnotations;
namespace X.Web.Helpers
{
    public class RequestSamplesModel
    {
        [Required]
        public string FirstName { get; set; }
        [Required]
        public string LastName { get; set; }
        public string Email { get; set; }
        [Required]
        public string Line1 { get; set; }
        [Required]
        public string Line2 { get; set; }
        [Required]
        public string City { get; set; }
        [Required]
        public string Postcode { get; set; }
        [Required]
        public string Country { get; set; }
    }
}

视图:

@{
    Layout = "~/Views/Shared/_PlainLayout.cshtml";
}
@using X.Web.Helpers
@model RequestSamplesModel
<form action="/Site/RequestSamples" method="POST">
    <div class="form-item">
        <span>First Name:</span>@Html.TextBoxFor(x => x.FirstName)</div>
    <div class="form-item">
        <span>Last Name:</span>@Html.TextBoxFor(x => x.LastName)</div>
    <div class="form-item">
        <span>Email:</span>@Html.TextBoxFor(x => x.Email)</div>
    <div class="form-item">
        <span>Address 1:</span>@Html.TextBoxFor(x => x.Line1)</div>
    <div class="form-item">
        <span>Address 2:</span>@Html.TextBoxFor(x => x.Line2)</div>
    <div class="form-item">
        <span>City:</span>@Html.TextBoxFor(x => x.City)</div>
    <div class="form-item">
        <span>Postcode:</span>@Html.TextBoxFor(x => x.Postcode)</div>
    <div class="form-item">
        <span>Country:</span>@Html.TextBoxFor(x => x.Country)</div>
    <div class="form-item">
        <input class="submit-button" type="image" src="/_content/images/email-submit.gif" /></div>
</form>

如何获得MVC3模型验证的真或假输出

有谁知道是否有这样的代码可以做到这一点,比如@Html。IsValid(x => x. firstname)

不,没有这样的内置代码。但是,如果再写一个,就很简单了,现在有:

public static class HtmlExtensions
{
    public static bool IsValid<TModel, TProperty>(
        this HtmlHelper<TModel> htmlHelper, 
        Expression<Func<TModel, TProperty>> expression
    )
    {
        var modelState = htmlHelper.ViewData.ModelState;
        var name = ExpressionHelper.GetExpressionText(expression);
        var key = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);
        ModelState value;
        return !modelState.TryGetValue(key, out value) || 
               value.Errors.Count == 0;
    }
}

现在,在您的视图中,只需将扩展方法引入范围和:

@if (Html.IsValid(x => x.FirstName))
{
    @:<div>Super, the first name is valid</div>
}