ASP.Net Core Добавление элементов и редактирование их в коллекции модели - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь реализовать небольшую вики.

Я хочу позволить пользователям создавать страницы, добавлять разделы на эти страницы и контент в эти разделы (раздел представляет собой тип содержимого)

Я определил довольно простую модель (есть немного больше, но это будет позже):

    public class Page : IPageContent
    {
        public string Title { get; set; }
        public Guid Id { get; set; }
        public List<IPageContent> Contents { get; set; } = new List<IPageContent>();
    }

    public class Section : IPageContent
    {
        public Guid Id { get; set; }
        public string Title { get; set; }
        public List<IPageContent> Contents { get; set; } = new List<IPageContent>();
    }

    public class HtmlContent : IPageContent
    {
        public Guid Id { get; set; }
        public string Content { get; set; }
    }

Я определил свое мнение таким образом, основываясь на этом вопросе о нескольких кнопках отправки

<h2>Create new page</h2>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="ContentPage.Title" class="control-label"></label>
                <input asp-for="ContentPage.Title" class="form-control" />
                <span asp-validation-for="ContentPage.Title" class="text-danger"></span>
            </div>

            <div id="sections">
                @if (Model != null && Model.ContentPage != null && Model.ContentPage.Contents != null)
                {
                    foreach (var section in Model.ContentPage.Contents)
                    {
                        if (section is GuildWikiData.Section)
                        {
                            @Html.Partial("CreateSection", section);
                        }
                    }
                }

            </div>
            <div class="form-group">
                <input type="submit" value="AddSectionToPage" class="btn btn-default" formaction="AddSectionToPage"/>
            </div>

            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-default" formaction="Create"/>
            </div>
        </form>
    </div>
</div>

и попытался добавить PartialView для секций, которые будут добавлены:

<section id="@Model.Title" title="@Model.Title">
    <label asp-for="Title" class="control-label"></label>
    <input asp-for="Title" class="form-control" />
    <span asp-validation-for="Title" class="text-danger"></span>

    <input type="submit" value="AddHtmlContentToSection" class="btn btn-default" formaction="AddHtmlContentToSection"/>
</section>

Наконец, вот мои соответствующие методы в контроллере:

public IActionResult Create()
    {
        return View("CreateContentPage", new PageViewModel());
    }
    [HttpPost]
    public IActionResult Create(PageViewModel page)
    {
        page.ContentPage.Id = Guid.NewGuid();
        DevelopPages.Add(page.ContentPage);
        return Page(page.ContentPage.Id.ToString());
    }

    [HttpPost]
    public IActionResult AddSectionToPage(PageViewModel tempPage)
    {
        tempPage.ContentPage.Contents.Add(new Section()
        {
            Id = Guid.NewGuid(),
            Title = "Section"
        });
        return View("CreateContentPage", tempPage);
    }

    [HttpPost]
    public IActionResult AddHtmlContentToSection(PageViewModel tempPage)
    {
        return View("CreateContentPage", tempPage);
    }

Что происходит, когда мой первый вызов Create () работает хорошо, AddSectionToPage () действительно добавляет раздел на мою страницу, и PartialView отображается, но если я пытаюсь сохранить с помощью [HttpPost] Create () или использоватьдругой помеченный метод [HttpPost], модель, переданная в аргументе, не содержит ранее добавленных разделов.

Итак, вот мои вопросы:

  • Почему моя модель не отслеживает ранеедобавленные разделы?
  • Есть ли лучший способ достичь моей цели?Я хотел бы добавить несколько типов контента, не только необработанный html, но и форматированный текст, изображения, ... чтобы каждый раз предоставлять адаптированные средства управления вводом.

Спасибо за вашу помощь!

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