2015-12-28 2 views
0

Я создаю простой MVC CRUD без использования базы данных, но просто создаю методы в классе модели Repository.Как сделать методы удаления и редактирования в MVC без DB

Чтобы было легче понять, у меня есть 2 класса моделей. 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.

и, пожалуйста, спросите, пропустил ли я что-нибудь! Спасибо :-)

+0

@HenkHolterman public static Список notes = new Список (); MyNote включает в себя такие свойства, как ID, Titel, Date и note :-) –

+0

@HenkHolterman Вы только здесь, чтобы делать подобные комментарии? Потому что, если вопрос не имеет для вас смысла, тогда просто не отвечайте. И FYI - это не только удаление, но и редактирование. Попытайтесь прочитать проблему, а не комментировать что-то еще. –

+0

@HenkHolterman У этого есть все, что связано с asp.net-mvc ?? –

ответ

3

Похоже, вы используете Список для своего хранилища в памяти. Для удаления, вы можете реализовать что-то вроде этого:

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

Edit: Тем не менее, в этом случае список будет проверять на равенство ссылок. Поскольку у вас есть идентификатор, который я буду считать, является уникальным, вы можете вместо этого:

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

Вы также можете реализовать IEquatable на классе MyNote, чтобы изменить то, как ваши записи сравниваются друг с другом, и возвращение действительное совпадение, когда идентификаторы совпадают.

Для 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; 
} 
+0

Спасибо за ответ! Теперь он работает, когда я удаляю, у меня есть еще одна проблема. Всякий раз, когда я нажимаю кнопку «Удалить» на веб-странице, она не отображает заголовок или примечание и т. Д., Но все равно удаляет их? :-) –

+0

Я не совсем уверен, что вы подразумеваете, не показывая Заголовок/Примечание. Все, что сделает функция delete, - это удалить элемент из вашего списка. Как правило, для действия «Удалить» ваш контроллер будет иметь два метода действий: один из них - HttpGet, который принимает заметку и возвращает страницу, запрашивающую пользователя, уверены ли они, что они хотят удалить эту заметку, отображая такие вещи, как заголовок или примечания, прикрепленные , и HttpPost, который берет Заметку и удаляет ее из ваших резервных данных. Вы хотите сделать это так, чтобы что-то вроде поисковой системы случайно не уничтожило все ваши данные. –

+0

Да, это то, что есть в методе get и post. У меня также проблемы с написанием. Я сделал ссылку для класса репозитория в контроллере. В моем методе удаления HttpPost я написал «note.Delete (mn)», и он также работает после создания представления. Но я не знаю, что мне нужно написать в HttpGet, чтобы показать название и отметить прилагаемое :-)! –

2

Вы можете сделать что-то вроде этого:

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, чтобы сделать ваш код более простым в обслуживании.

Смежные вопросы