Я пытаюсь сформировать отношения для моделей между новостями и их категориями. - PullRequest
0 голосов
/ 08 сентября 2018

Я хочу, чтобы новости могли иметь несколько категорий новостей. отношение один-ко-многим . Я пытаюсь передать категории контроллеру MVC (после создания действия). Но ModelState.IsValid всегда терпит неудачу. Я думаю, что мое действие пост не получает выбранные значения из вида как-то ..

Пожалуйста, помогите моему другу вундеркиндов!

У меня есть News.cs:

public class News
{
    public long NewsId { get; set; }
    public ICollection<NewsCategory> NewsCategories { get; set; }
}

У меня есть NewsCategory.cs:

public class NewsCategory
{
    public int NewsCategoryId { get; set; }
    public long NewsId { get; set; }
    public string Title { get; set; }
}

У меня есть NewsController.cs:

// GET: News/Create
    public IActionResult Create()
    {
        List<NewsCategory> newsCategories = new List<NewsCategory>();
        newsCategories = (from s in _context.NewsCategory select s).OrderBy(m => m.Title).ToList();
        newsCategories.Insert(0, new NewsCategory { NewsCategoryId = 0, Title = "Select" });
        ViewBag.NewsCategories = newsCategories;
        return View();
    }

А это действие Создать сообщение:

// POST: News/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create([Bind("Title,Content,NewsTagName1,NewsTagName2")]News news,  List<IFormFile> files)
    {
        if (ModelState.IsValid)
        {
            _context.Add(news);

            var newsCategories = news.NewsCategories;
            foreach(var item in newsCategories)
            {
                item.NewsId = news.NewsId;
                _context.NewsCategory.Add(item);
            }
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        return View(news);
    }

Но всегда происходит сбой на Model.IsValid Вот снимок того, что находится в объекте Новости. enter image description here

Вот сообщение об ошибке: enter image description here

Вот представление создания новостей:

@model Carsubfax.Models.News

@{
    ViewData["Title"] = "Create";
}


        <form asp-action="Create" id="comment-form" name="comment-form" method="post" enctype="multipart/form-data">
            <div class="row">
                <div class="col-md-10 col-md-offset-1">
                    <div class="form-group">
                        <label asp-for="Title" class="control-label"></label>
                        <input asp-for="Title" class="form-control" id="txtTitle" autocomplete="off" required="required" placeholder="Enter your news title." />
                        <span asp-validation-for="Title" class="text-danger"></span>
                    </div>
                </div>
                <div class="col-md-10 col-md-offset-1">
                    <div class="form-group">
                        <label class="control-label">News Cover Image<span style="color:red">*</span></label>
                        <input type="file" name="files" required />
                    </div>
                </div>
                <div class="col-md-10 col-md-offset-1">
                    <div class="form-group">
                        <label class="control-label">News Category</label>
                        <select asp-for="NewsCategories" class="form-control" asp-items="@(new SelectList(ViewBag.NewsCategories, "NewsCategoryId", "Title"))" required="required"></select>
                    </div>
                <div class="col-md-10 col-md-offset-1">
                    <div class="form-group text-center">
                        <button type="submit" class="btn btn-primary" onclick="return btnSubmit_clik();">POST</button>
                    </div>
                </div>
                <div class="col-md-10 col-md-offset-1">
                    <div class="form-group text-center">
                        <a asp-action="Index">Back to List</a>
                    </div>
                </div>
            </div>
        </form>
    </div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...