Получение MVC2 Delete для работы - PullRequest
0 голосов
/ 28 июля 2010

Хорошо, у меня есть приложение MVC. и я пытаюсь заставить мой удалить работать. По сути, я хочу, чтобы, когда я нажимаю «Удалить», я переходил на страницу с надписью «Вы уверены?» у меня это работает, проблема заключается в перехвате запроса и на самом деле делает удаление. Я пробовал разные методы. как показано ниже.

 public ActionResult Delete(int id)
    {
        var something = friendsDB.Friends.Single(a => a.Id == id);
        return View(something);
    }
    [HttpPost]
    public ActionResult Delete(int id, string confirmButton)
    {
        var something = friendsDB.Friends.Single(a => a.Id == id);

        // For simplicity, we're allowing deleting of albums
        // with existing orders We've set up OnDelete = Cascade
        // on the Album->OrderDetails and Album->Carts relationships

        friendsDB.DeleteObject(something);
        friendsDB.SaveChanges();

        return View("Index");
    }

Это не работает, причина, удаление объекта и сохранение сохраняются

"C: \ Users \ Mtszc \ Documents \ Визуальное студия 2010 \ Проекты \ Test \ Test \ Content \ Контроллеры \ DownloadsController.cs (36,23): Ошибка CS1061: «Test.Models.FriendsDB» не содержит определения для «DeleteObject» и без метода расширения «DeleteObject» принимает первый аргумент типа 'Test.Models.FriendsDB' может быть найден (Вы пропустили директиву использования или ссылка на сборку?) "

Второе, что я попробовал, было

public ActionResult Delete(int id)
    {
        var something = friendsDB.Friends.Single(a => a.Id == id);
        return View(something);
    }
    [HttpDelete]
    public ActionResult Delete(Friend myFriend)
    {
        try
        {
            friendsDB.Friends.DeleteOnSubmit(myFriend);
            friendsDB.SubmitChanges();
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

это не сработало. он скомпилирован, но когда я нажимаю «удалить», и он переходит на страницу, где я говорю, что я уверен, что хочу удалить, он возвращает представление, которое было подвохом, то есть попытка не удалась.

это простая база данных sql, которую я создал, Id, name, link. и я использую linq к классу sql. я могу создавать и просматривать, но не удалять.

Ответы [ 3 ]

1 голос
/ 28 июля 2010

Вместо этого попробуйте что-нибудь подобное.

var rowToDelete = friendsDB.Friends.Single(a => a.ID == myFriend.ID);
friendsDB.Friends.DeleteOnSubmit(rowToDelete);
friendsDB.SubmitChanges();

Это был бы простой способ позаботиться об удалении записи с помощью Linq.Я извиняюсь, если синтаксис не идеален, так как я пишу его на лету из головы.

Кстати, есть несколько отличных видео, сделанных ребятами из Microsoft для изучения ASP.NET MVCа также LINQ.Проверьте это.

http://www.asp.net/mvc

Приветствия

0 голосов
/ 28 июля 2010

Хорошо, для тех, кто когда-либо рассматривает это, я решил проблему. Через несколько часов копания я решил проблему. Для любого, кто создал базу данных sql и создал для нее класс модели, используя linq to sql, вот как можно заставить удалить работать.

public ActionResult Delete(int id)
    {
        var something = friendsDB.Friends.Single(a => a.Id == id);
        return View(something);
    }
    [HttpPost]
    public ActionResult Delete(int id, string confirmButton)
    {
        var sigh = friendsDB.Friends.Single(a => a.Id == id);
        try
        {
            friendsDB.Friends.DeleteOnSubmit(sigh);
            friendsDB.SubmitChanges();
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

с этим создайте строго типизированное представление удаления.

0 голосов
/ 28 июля 2010

Сообщения об ошибках, кажется, сбивают вас с толку.

"C:\Users\Mtszc\Documents\Visual Studio 2010
\Projects\Test\Test\Content\Controllers\DownloadsController.cs(36,23): error 
CS1061: 'Test.Models.FriendsDB' does not contain a definition for 'DeleteObject'
and no extension method 'DeleteObject' accepting a first argument of
type 'Test.Models.FriendsDB' could be found (are you missing a using directive
or an assembly reference?)"

Не относится к действию MVC, оно относится к вашему вызову метода Test.Models.FriendsDB:

friendsDB.DeleteObject(something);   

Похоже, вы не определили метод «DeleteObject» в своей модели friendsDB или у вас нет перегруженного метода, который принимает тип объекта «Test.Models.FriendsDB».

Во-вторых, не путайтеМетоды HTTP (Get, Post, Put, Delete) с тем, что вы пытаетесь достичь.«Положить» и «удалить» - это методы, которые я не считаю, что веб-браузеры часто используют, если вообще используют.Большинство запросов GET, если вы не отправляете форму, тогда они POST.Добавление HttpDelete, скорее всего, сделает это действие бесполезным.Если вы хотите только удалить действие из отправки формы, добавьте HttpPost

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...