如何在没有DB的MVC中制作Delete和Edit方法

本文关键字:Delete 方法 Edit MVC DB | 更新日期: 2023-09-27 18:28:14

我正在构建一个简单的MVC CRUD,而不使用数据库,只是在Repository模型类中生成方法。

为了更容易理解,我有两个模型类。MyNote,我在其中有一些属性,而NoteRepository,我有一个包含属性的列表。

然后我做了一个NoteController,我已经做了Get和Create方法,但我似乎不知道该写什么来制作Edit和Delete方法?希望你们能帮忙。

在这里,您将看到我的项目中的一些代码:

        [HttpPost]
    public ActionResult Create(MyNote mn)
    {
        try
        {
            note.Create(mn);
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

这是从控制器创建的。

public static List<MyNote> notes = new List<MyNote>();
        public NoteRepository()
    {
        notes.Add(new MyNote() { ID = 1, Titel = "Morgenmad", OprettelsesDato = DateTime.Now, Note = "Spis morgenmad i dag" });
        notes.Add(new MyNote() { ID = 2, Titel = "Frokost", OprettelsesDato = DateTime.Now, Note = "Spis frokost i dag" });
        notes.Add(new MyNote() { ID = 3, Titel = "Aftensmad", OprettelsesDato = DateTime.Now, Note = "Spis aftensmad i dag" });
    }
    public void Create(MyNote mn)
    {
        notes.Add(mn);
    }

这是带有列表的存储库类,以及create方法的方法。

请问我是否遗漏了什么!谢谢:-)

如何在没有DB的MVC中制作Delete和Edit方法

看起来您正在为内存存储库使用List。对于删除,你可以实现这样的东西:

public bool Delete (MyNote noteToDelete) { return notes.Remove(noteToDelete); }

编辑:但是,在这种情况下,列表将检查引用是否相等。既然你有一个ID,我认为它是唯一的,你可以这样做:

public bool Delete(MyNote noteToDelete) { var matchingNote = notes.FirstOrDefault(n => n.ID == noteToDelete.ID); return notes.Remove(matchingNote); }

您还可以在MyNote类上实现IEquatable,以更改注释之间的比较方式,并在ID相同时返回有效的匹配。

对于IEquatable示例,您希望将MyNote的类定义更改为:

public class MyNote : IEquatable<MyNote>

并在MyNote类中添加以下代码:

public override bool Equals(object obj) {
    if (obj == null) return false;
    Part objAsNote = obj as MyNote;
    if (objAsNote == null) return false;
    else return Equals(objAsNote);
}
public bool Equals(MyNote otherNote) {
    if(otherNote == null) return false;
    return (this.ID.Equals(otherNote.ID));
}
public override int GetHashCode(){
    return this.ID;
}

您可以这样做:

public ActionResult Edit(MyNote noteToEdit)
{
    var oldNote = notes.FirstOrDefault(n => n.Id == noteToEdit.Id);
    if(oldNote == null)
        return View(); //With some error message;
    oldNote.Title = noteToEdit.Title;
    oldNote.OprettelsesDato = DateTime.Now;
    oldNote.Note = noteToEdit.Note;
    return RedirectToAction("Index", "Note");
}
public ActionResult Delete(int id)
{
    var noteToRemove = notes.FirstOrDefault(x => x.Id == id);
    if(noteToRemove == null)
        return View(); //With some error message;
    notes.Remove(noteToRemove);
    return RedirectToAction("Index", "Note");
}

当你编辑你的笔记时,我建议你使用AutoMapper使你的代码更容易维护。