Редактировать название элемента в текстовом файле ASP. NET MVC - PullRequest
0 голосов
/ 28 мая 2020

Я новичок в ASP. NET MVC. У меня есть веб-приложение со списком дел. Однако я должен использовать текстовый файл в качестве базы данных для добавления создания новых категорий (Categories.txt). Я могу успешно добавлять новые категории в текстовый файл, используя ActionResult Create в моем CategoriesController. Редактирование ActionLink находится в HomeController. HomeController используется для отображения списка дел из текстового файла, который отображает категории.

Я изо всех сил пытаюсь понять, как я могу отредактировать эту спецификацию c category name, используя [HttpGet] public ActionResult Edit(int id) { }, чтобы получить идентификатор категории.

Текстовый файл имеет следующий формат:

CategoryName, ID
Groceries, 0

Мой код для HomeController выглядит следующим образом:

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
    {
        // Reading in both text files
        public List<Category> categories = new List<Category>();
        public List<Item> it = new List<Item>();

        // GET: Home
        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);
        }    
    }
}

И мой CategoryController выглядит как следует:

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

namespace ToDoList.Controllers
{
    public class CategoryController : Controller
    {
        // GET: Category
        public ActionResult Index()
        {
            return View();
        }

        // GET: Category/Details/5
        public ActionResult Details(int id)
        {
            return View();
        }

        // GET: Category/Create
        public ActionResult Create()
        {
            return View();
        }

        // POST: Category/Create
        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                string categoryName = collection["categoryName"];
                string CatDataLast = System.IO.File.ReadLines(Server.MapPath("~/Data/Categories.txt")).Last();

                string[] idNum = CatDataLast.Split(',');
                int lastId = Convert.ToInt32(idNum[1]);

                int newID = lastId + 1;

                System.IO.File.AppendAllText(Server.MapPath("~/Data/Categories.txt"), '\n'+categoryName + "," + Convert.ToInt32(newID));

                // TODO: Add insert logic here

                return RedirectToAction("Index", "Home");
            }
            catch
            {
                return View();
            }
        }

        // GET: Category/Edit/5
        [Route("Category/Edit/{id}")]
        public ActionResult Edit(Category id)
        {

            return View(id.categoryID);
        }

        // POST: Category/Edit/5
        [HttpPost]
        public ActionResult Edit(Category category, FormCollection collection)
        {
            try
            {
                string editedName = collection["categoryName"];
                string catName = category.categoryName;

                string str = System.IO.File.ReadAllText(Server.MapPath("~/Data/Categories.txt"));
                str = str.Replace(catName, editedName);
                System.IO.File.WriteAllText(Server.MapPath("~/Data/Categories.txt"), str);
                // TODO: Add update logic here

                return RedirectToAction("Index", "Home");
            }
            catch
            {
                return View();
            }
        }

        // GET: Category/Delete/5
        public ActionResult Delete(int id)
        {
            return View();
        }

        // POST: Category/Delete/5
        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}

Я могу вставить в текстовый файл, но я не могу редактировать элемент в этом текстовом файле, когда мы меняем имя категории.

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

1 Ответ

0 голосов
/ 28 мая 2020

См. Это Как найти и заменить текст в файле с подходом C#, это базовый c c# код, который, вероятно, выполнит желаемую вами работу, если вам нужны более сложные замены вы можете использовать Regex.Replace Документация Microsoft о методе Regex.Replace

...