Аннотации данных, работающие только для некоторого свойства модели представления - PullRequest
0 голосов
/ 02 мая 2018

У меня есть следующий вид модели:

public class ClientViewModel
{
    public string Title { get; set; }

    [Required(ErrorMessage = "Name is required")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Surname is required")]
    public string Surname { get; set; }

    [Required(ErrorMessage = "Email is required")]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    [Display(Name = "Contact Number")]
    public string ContactNumber { get; set; }
}

И cshtml:

    <div class="form-horizontal">
    <h4>Client information</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

    <div class="form-group">
        @Html.LabelFor(model => model.Title, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownListFor(model => model.Title, new SelectList(ViewBag.TitleList, "Text", "Value"), "Title")
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.Surname, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Surname, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Surname, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.ContactNumber, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.ContactNumber, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.ContactNumber, "", new { @class = "text-danger" })
        </div>
    </div>

У меня есть следующие проблемы:

  • Требуемая аннотация работает только для поля Email, а не для полей Name и Surname.
  • Сообщение об ошибке, отображаемое, когда поле Email пустое, не является сообщением об ошибке, которое я поместил в модель представления.

Есть идеи, что я делаю не так?

Визуализированный html для поля электронной почты и фамилии:

    <div class="form-group">
        <label class="control-label col-md-2" for="Surname">Surname</label>
        <div class="col-md-10">
            <input class="form-control text-box single-line" id="Surname" name="Surname" type="text" value="" />
            <span class="field-validation-valid text-danger" data-valmsg-for="Surname" data-valmsg-replace="true"></span>
        </div>
    </div>

    <div class="form-group">
        <label class="control-label col-md-2" for="Email">Email</label>
        <div class="col-md-10">
            <input class="form-control text-box single-line" data-val="true" data-val-required="The Email field is required." id="Email" name="Email" type="email" value="" />
            <span class="field-validation-valid text-danger" data-valmsg-for="Email" data-valmsg-replace="true"></span>
        </div>
    </div>

Как вы можете видеть для электронной почты, у нас есть атрибут data-val-required, но не для поля Фамилия.

...