У меня есть текстовый файл с именем 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>
Мы будем очень благодарны за любую помощь или совет.