运行SQL的AJAX请求后,不需要的页面刷新

时间:2014-03-07 00:21:45

标签: c# jquery sql-server ajax razor

点击按钮,我想删除数据库中的内容。

以下是我的点击处理程序。

$('.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 个答案:

答案 0 :(得分:3)

我不知道是笑还是哭...事实证明我的live.js正在强制刷新,因为它看到了更改,并希望为我更新页面。 (按照预期,我从未期望它在这些情况下这样做。)

感谢大家的帮助......

答案 1 :(得分:2)

评论有点长 - 但是在不运行查询时它有效的事实很有意思。如果您从文档page中尝试以下操作会发生什么:

  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" );
      });
    
  3. 如何做这个帖子:

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

    最后,您是否尝试使用$.ajax而不是$.get速记来调用?这样,您就可以访问其他options

答案 2 :(得分:1)

尝试

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

答案 3 :(得分:0)

试试这个:

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

还要检查lessonID是否正确传递给QueryString集合。由于这个原因,SQL Query可能会失败。

答案 4 :(得分:0)

在您的控制器中创建操作,并且不要使用对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()