Валидация ASP.NET MVC

125
08 августа 2019, 05:40

У меня есть два класса

public class Owner
{
    [HiddenInput(DisplayValue = false)]
    public int Id { get; set; }
    [Display(Name = "Имя")]
    [Required]
    public string Name { get; set; }
    [Display(Name = "Почта")]
    [Required]
    public string Email { get; set; }
    public ICollection<HomeRepair> HomeRepairs { get; set; }
    public Owner()
    {
        HomeRepairs = new List<HomeRepair>();
    }
    ...
}
public class HomeRepair
{
    [HiddenInput(DisplayValue = false)]
    public int Id { get; set; }
    [Display(Name = "Адрес")]
    [Required]
    public string Address { get; set; }
    public int? OwnerId { get; set; }
    [Required]
    public Owner Owner { get; set; }
    ...
}

Метод контроллера

    [HttpGet]
    public ActionResult Create()
    {
        SelectList owners = new SelectList(db.Owners, "Name", "Name");
        ViewBag.Owners = owners;
        return View();
    }
    [HttpPost]
    public ActionResult Create(HomeRepair homeRepair, Owner owner)
    {
        if (ModelState.IsValid)
        {
            homeRepair.RepairStatus = "Ремонт запланирован";
            db.HomeRepairs.Add(homeRepair);
            foreach (var i in db.Owners)
            {
                if (i.Name == owner.Name)
                {
                    i.HomeRepairs.Add(homeRepair);
                }
            }
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View();
    }

Представление

@model TestTask.Models.HomeRepair 
@using TestTask.Models; 
 
@{ 
    ViewBag.Title = "Добавление дома"; 
} 
 
<h2>Добавление дома</h2> 
 
@using (Html.BeginForm()) 
{ 
    <h4>Дом</h4> 
    <div class="editor-label"><b>@Html.DisplayNameFor(model => model.Address)</b></div> 
    <div class="editor-field"> 
        @Html.EditorFor(model => model.Address) 
        @Html.ValidationMessageFor(model => model.Address, "", new { @class = "text-danger" }) 
    </div> 
 
    <div class="editor-label"><b>@Html.DisplayNameFor(model => model.RepairStatus)</b></div> 
    <div class="editor-field"> 
        Ремонт запланирован 
    </div> 
    <h4>Владелец</h4> 
    Owner owner = new Owner(); 
 
    <div id="selectOwner" class="editor-label"><b>Выберите владельца</b></div> 
    <div id="selectOwnerDropDownList" class="editor-field"> 
        @Html.DropDownList("Name", ViewBag.Owners as SelectList) 
    </div> 
 
    <p> 
        <a id="addNewOwner" class="addLink">Добавить нового владельца</a> 
    </p> 
    <div id="addOwner"> 
 
    </div> 
 
    <p> 
        <input type="submit" value="Добавить" /> 
    </p> 
 
} 
 
@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
    <script> 
        $('.addLink').one('click', function () 
        { 
            $("#selectOwner").hide(); 
            $("#selectOwnerDropDownList").hide(); 
            $("#addNewOwner").hide(); 
            var htmlAdd = "<div class='editor-label'><b>Имя</b></div>" + 
                          "<div class='editor-field'>" + 
                          "<input type='text' name ='owner.Name' value=''>" + 
                          "<span class='field-validation-valid text-danger'" + 
                          "data-valmsg-for='owner.Name' data-valmsg-replace='true'></span>" + 
                          "</div>" + 
                          "<div class='editor-label'><b>Email</b></div>" + 
                          "<div class='editor-field'>" + 
                          "<input type='text' name='owner.Email' value=''>" + 
                          "<span class='field-validation-valid text-danger'" + 
                          "data-valmsg-for='owner.Email' data-valmsg-replace='true'></span>" + 
                          "</div>"; 
                          $('#addOwner').append(htmlAdd) 
        }) 
    </script> 
     
     
}

Вот сама форма:

После нажатия на "Добавить нового владельца":

И после нажатия на "Добавить" выскакивает ошибка:

Валидация полей HomeRepair отлично работает, а Owner - нет. В чём может быть проблема ?

READ ALSO
Visual Studio Code C# Ввод с клавиатуры

Visual Studio Code C# Ввод с клавиатуры

Написал простенький код, который при вводе числа должен выдать на 10 большекомпилирую, нажимая F5

137
Затемнение окон Unity по нажатию кнопки

Затемнение окон Unity по нажатию кнопки

Доброго времени суток

124
Удаление выделенной строчки в DataGridView из базы данных

Удаление выделенной строчки в DataGridView из базы данных

Помогите сделать так чтобы при нажатии на кнопку удалялась выделенная строчка в DataGridView из базы данных

108