При нажатии кнопки я хочу удалить что-то из своей базы данных.

Ниже приведен мой обработчик кликов.

$('.deleteLesson').click(function () {
    $.get('/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID,function(data){
    });
});

Внутри DeleteLesson.cshtml у меня есть следующие

var db = Database.Open("database");
db.Query("DELETE FROM Lessons WHERE LessonID=@0", Request.QueryString["LessonID"]);

Когда запускается $.get, SQL выполняется в моей базе данных, но принудительно обновляет мою исходную страницу. Я не могу понять почему. При устранении неполадок я обнаружил, что обновление вызывает только строка db.Query, и ничего больше.

Для ясности: я могу закомментировать строку db.Query, и она работает именно так, как я хочу (за исключением того, что она не удаляет элемент)

5
Andy 7 Мар 2014 в 04:21

5 ответов

Лучший ответ

Я не знаю, смеяться или плакать ... оказывается, мой live.js принудительно обновлялся, поскольку он видел изменения и хотел обновить страницу за меня. (Как и предполагалось, я просто не ожидал, что это произойдет в этих обстоятельствах).

Спасибо всем за помощь...

3
Andy 16 Мар 2014 в 14:18

Немного долго для комментария, но интересно то, что он работает, когда запрос не выполняется. Что произойдет, если вы попробуете следующее на странице документации:

  1. Запросить страницу и проигнорировать результаты - (самый простой вызов):

    $('.deleteLesson').click(function () {
        $.get('/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID);
    });
    
  2. Оповещение о каждом из возможных результатов - посмотрите, имеют ли вызываемые обработчики смысл или они вообще вызываются:

    var url = '/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID;
    var jqxhr = $.get(url, function() {
      alert( "success" );
    })
      .done(function() {
        alert( "second success" );
      })
      .fail(function() {
        alert( "error" );
      })
      .always(function() {
        alert( "finished" );
      });
    

Как насчет того, чтобы сделать это как сообщение:

$.ajax({
type: "POST",
url: "/Assignment/Modules/DeleteLesson.cshtml",
data: { LessonID: lessonID }
})
 .done(function() {
    alert( "Record Deleted" );
});

Наконец, пробовали ли вы вызывать с помощью $.ajax вместо сокращения $.get? Это дает вам доступ к дополнительным параметрам.

2
Matthew 14 Мар 2014 в 19:39

Попробуйте с

$('.deleteLesson').click(function (e) {
  e.preventDefault();
  $.get('/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID,function(data){
     //code here
  });
});
1
Laukik Patel 15 Мар 2014 в 04:45

Попробуй это:

$('.deleteLesson').click(function (el, event) {
    event.preventDefault();
    $.get('/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID,function(data){
    });
});

Также убедитесь, что идентификатор урока правильно передается в коллекцию QueryString. Из-за этого может произойти сбой SQL-запроса.

0
reach4thelasers 14 Мар 2014 в 11:30

Создайте действие в своем контроллере и не используйте вызов страницы cshtml.

public class LessonControler{

   [AllowGet]
   public JsonResult DeleteLesson(long LessonID){
      //DoTheDeletion magic here
      return Json(new {Done="OK", Error=""}, JsonRequestBehavior.AllowGet);
  }

}

И измените javascript, чтобы он соответствовал новому вызову действия

$('.deleteLesson').click(function () {
    $.get('/Lesson/DeleteLesson?LessonID=' + lessonID,function(data){
    });
});

Или еще лучше преобразовать это в сообщение jQuery.post ()

0
Menelaos Vergis 17 Мар 2014 в 15:38