Как показать ошибки проверки для представления со встроенным компонентом (с формой) - PullRequest
0 голосов
/ 27 октября 2019

Я создаю что-то вроде контроллера древовидного представления с рекурсивными вызовами для рендеринга форм с возможностью добавления новых узлов и т. Д. Дерево рендерится с помощью компонента представления, который вызывается с "домашнего" сайта, который имеет дополнительные элементы, которые не должны бытьзатронуты рекурсивными вызовами из этого компонента представления. "SeededCategories" - это просто класс, который помогает отображать древовидное представление для категорий (идея для этого взята из ASP.NET MVC 4, создающего древовидное представление с рекурсивным частичным представлением ), вот как выглядят оба класса:

public class SeededCategories
{
        public int? Seed { get; set; }
        public IOrderedEnumerable<Category> Categories { get; set; }
}
public class Category
{
    [Required(ErrorMessage = "Field ID is required")]
    public int ID { get; set; }
    public int? Parent_ID { get; set; }
    [Required]
    [MinLength(3, ErrorMessage = "Name must be longer than 3 characters.")]
    public string Name { get; set; }
}

И вот так выглядит компонент представления данных (проще говоря, результатом является просто список с категориями)

public class DataViewComponent : ViewComponent {
     public IViewComponentResult Invoke()
        {
            SeededCategories model = new SeededCategories { Seed = null, Categories = result };
            return View("DataIndex", model);
        }
}

Это вызов с домашней страницы для этого представления «данных»Компонент (я использую @model Category из-за таких вещей, как переключение двух узлов, что происходит в домашнем представлении).

@model Category
@await Component.InvokeAsync("Data")

Это представление для этого компонента представления с рекурсивными вызовами (каждый узел имеет форму для добавления дочернего элемента):

@model SeededCategories

@if (Model.Categories.Where(s => s.Parent_ID == Model.Seed).Any())
{
    <ul>
        @foreach (var node in Model.Categories)
        {
            if (node.Parent_ID == Model.Seed)
            {
                SeededCategories inner = new SeededCategories { Seed = node.ID, Categories = Model.Categories };
        <li>
            <form asp-controller="Home" asp-action="AddNode" asp-route-parent="@node.ID" method="post">
                <div asp-validation-summary="All" class="text-danger"></div>
                <div class="form-group">
                    <input asp-for="@node.Name" name="Name" placeholder="Add child" />
                    <span asp-validation-for="@node.Name"></span>
                </div>
                <button type="submit" class="btn btn-primary">Add Child</button>
            </form>
            @Html.Partial("Components/Data/DataIndex", inner)
        </li>
            }
        }
    </ul>
}

И последняя часть этого процесса, AddNode действие от Home контроллера, который просто получает категории Name и ID из формы, добавляет материал в базу данных и перенаправляет на Home действие, которое не выполняет ничего, кроме визуализации Home представления.

[HttpPost]
public IActionResult AddNode(int parent, Category category)
{
    if (!ModelState.IsValid)
    {
        return RedirectToAction("home");
    }

    category.Parent_ID = parent;
    _dataRepository.AddNode(category);
    return RedirectToAction("home");
    }
}

И есть проблема: есть ли способ показать ошибки проверки в моем Data View Component (яn, который у меня есть формы с входами) при перенаправлении на Home действие (которое имеет вызов для этого компонента просмотра). Я новичок в .net вещи, может быть, есть другой способ показать эти ошибки проверки (они могут также отображаться в представлении Home, в верхней части вызова для компонента просмотра).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...