Создание сворачиваемой строки в таблице для просмотра данных из текстового файла MVC - PullRequest
0 голосов
/ 28 мая 2020

У меня есть текстовый файл с именем Categories в следующем формате:

Category Name,Id
Groceries,0

У меня также есть второй текстовый файл с именем Items в следующем формате:

Item Name,ID,CategoryId,Checked
Veggies,1,0,True

Где Checked означает, завершен ли элемент или нет, поэтому флажок будет снят, если Checked равно false , а CategoryID служит внешним ключом для ID в текстовом файле категории.

Я создал MVC ASP. NET веб-приложение, и я создал таблицу, которая может успешно читать категории из файла категорий и отображать их. Однако я пытаюсь сделать каждую строку сворачиваемой , чтобы элементы (из файла Item.txt) могли отображаться в указанной категории c. Я создал ViewModel, чтобы объединить модели Category.cs и Item.cs. Вот мои коды:

HomeController.cs:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ToDoList.Models;
using ToDoList.ViewModels;

namespace ToDoList.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        //Reading in both text files
        List<Category> categories = new List<Category>();
        List<Item> it = new List<Item>();
        public ActionResult Index()
        {
            //CatData means CategoryData
            string CatData = System.IO.File.ReadAllText(Server.MapPath("~/Data/Categories.txt"));
            string ItemData = System.IO.File.ReadAllText(Server.MapPath("~/Data/Item.txt"));

            foreach (string rowInItem in ItemData.Split('\n')) {

                if (!string.IsNullOrEmpty(rowInItem)) {

                    it.Add(new Item { 

                        itemName = rowInItem.Split(',')[0],
                        itemID = Convert.ToInt32(rowInItem.Split(',')[1]),
                        categoryID = Convert.ToInt32(rowInItem.Split(',')[2]),
                        check = rowInItem.Split(',')[3]
                    });
                }
            }
            foreach (string row in CatData.Split('\n')) {

                if (!string.IsNullOrEmpty(row)) {

                    categories.Add(new Category
                    {
                        categoryName = row.Split(',')[0],
                        categoryID = Convert.ToInt32(row.Split(',')[1]),


                    }) ;
                }
            }

            var categoryItemViewControler = new CategoryItemViewModel
            {
                Cat = categories,
                It = it
            };
            return View(categoryItemViewControler);
        }
    }
}

Модели

Category.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics.Contracts;
using System.Linq;
using System.Web;

namespace ToDoList.Models
{
    public class Category
    {
        [Required]
        public string categoryName { get; set; }
        public int categoryID { get; set; }
        public List<Item> items { get; set; }
    }
}

Item.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ToDoList.Models
{
    public class Item
    {
        public int itemID { get; set; }
        public string itemName { get; set; }
        public int categoryID { get; set; }
        public string check { get; set; }

    }
}

ViewModel CategoryItemViewModel:

using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Linq;
using System.Web;
using ToDoList.Models;

namespace ToDoList.ViewModels
{
    public class CategoryItemViewModel
    {
        //For Category
        public List<Category> Cat { get; set; }
        //For Items
        public List<Item> It { get; set; }
    }
}

Views / Home / Index.cs html:

@using ToDoList
@model ToDoList.ViewModels.CategoryItemViewModel
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<body>

    <br />
    <h1>WELCOME TO THE TO DO LIST </h1>
    <span>
        <button type="button" class="btn btn-primary">ADD CATEGORY</button>
        <button type="button" class="btn btn-danger">DETELE CHECKED</button>

    </span>
    <br />
    <br />

    <div class="table-responsive">
        <table class="table">  
            <tr>
                <th>#</th>
                <th>
                  Category ID
                </th>
                <th>
                    Category Name
                </th>
                <th></th>
            </tr>

            @foreach (var cats in Model.Cat)
            {
                <tr>
                    <td>+</td>
                    <td>
                        @cats.categoryID
                    </td>
                    <td>
                        @cats.categoryName
                    </td>

                    <td>
                        @Html.ActionLink("Add", "Create", new { id = @cats.categoryID }) |
                        @Html.ActionLink("Edit", "Edit", new { id = @cats.categoryID }) |
                        @Html.ActionLink("Delete", "Delete", new { id = @cats.categoryID })
                    </td>
                </tr>

            }

        </table>
    </div>

</body>
</html>

Мы будем очень благодарны за любую помощь или совет.

...