Комбинация Jquery POST с классическим жерехом - PullRequest
2 голосов
/ 11 сентября 2009

Я пробовал много способов выполнить это, но этого не происходит .. вот в чем дело ... У меня есть данные, отображаемые в строках таблицы, каждая строка имеет свой идентификатор, представляющий идентификатор человека, которого я хочу удалить. Я использую jquery для сбора этого идентификатора из строки, в которой находится моя кнопка, вот код, как я это делаю, его работу я просто пишу, чтобы вы могли понять, чего я пытаюсь достичь:

var customer_id = $(this).parents("tr").attr('id');

Когда я тестирую его с помощью оповещения, оно работает, вот сложная часть, которую я просто застрял. У меня есть файл с именем Delete.aspx, вот его содержимое

<%

string p = Request ["value"]; int pInt = Int32.Parse (p);

var dataContext = new CustomersDataContext();
var customer = from m in dataContext.Customers
               where m.id == pInt
               select m;
dataContext.Customers.DeleteAllOnSubmit(customer);
dataContext.SubmitChanges();
%>

Теперь я пытаюсь отправить значения Delete.aspx, чтобы удалить человека с определенным идентификатором, и он работает, набрав в браузере Delete.aspx? Value = 7, он удаляет человека с идентификатором 7. Теперь вот где я действительно застрял. Из Default.aspx я пытаюсь добраться до Delete.aspx и передать идентификатор человека, используя jquery, например:

$(".btn-delete").click(function() {
                 var answer = confirm("If you press OK, this customer will be deleted?")
                 var customer_id = $(this).parents("tr").attr('id');
                 if (answer) {


                      $.ajax({
                     type: "POST",
                     url: "Delete.aspx",
                     data: "{value: '" + customer_id + "'}",
                     contentType: "application/json; charset=utf-8",
                     dataType: "json",
                     success: function(msg) {
                     AjaxSucceeded(msg);
                     },
                     error: AjaxFailed

                     });

                     $(this).parents("tr").animate({ backgroundColor: "#fbc7c7" }, "fast")
                .animate({ opacity: "hide" }, "slow")
                     return false;
                 }
                 else {
                     alert("Customer has not been deleted!")
                 }


             });

             function AjaxSucceeded(result) {
                 alert(result.d);
             }
             function AjaxFailed(result) {
                 alert(result.status + ' ' + result.statusText);
             }

         });   

Итак, теперь результат, когда я нажимаю кнопку и подтверждаю удаление, я получаю «500 Internal server error», это исправимо или есть какой-то другой простой способ сделать то же самое?

Спасибо


Я изменил код ... но все же мне нужна помощь ... Я чувствую себя так близко, что, по крайней мере, укажу мне правильное направление ..

вот мой Delete.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Second_Question
{
    public partial class Delete : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            string p = Request["value"];
            int pInt = Int32.Parse(p);

            var dataContext = new CustomersDataContext();
            var customer = from m in dataContext.Customers
                           where m.id == pInt
                           select m;
            dataContext.Customers.DeleteAllOnSubmit(customer);
            dataContext.SubmitChanges();


        }
    }
}

вот мой Delete.aspx

есть идеи? спасибо

1 Ответ

1 голос
/ 11 сентября 2009

«500 Internal Server Error» обычно возникает из-за того, что у вас есть серверный код, который либо неправильно скомпилирован, либо выдал необработанное исключение.

Я бы посоветовал вам попробовать несколько изменений:

Переместите процедуру удаления в определенный метод, который украшен атрибутом [WebMethod]. Убедитесь, что ваш код включает System.Web.Services.

Пусть ваш вызов jQuery ajax включает "/Delete.aspx/MyDeleteMethod" вместо всей страницы.

Вы думали о безопасности для этого приложения? Что произойдет, если кто-то перехватит ваш customer_id и на лету изменит его с помощью Firebug?

EDIT: Хорошо, вот что я хотел бы предложить для серверного кода

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services

namespace Second_Question
{
    public partial class Delete : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        [WebMethod]
        public static void DeleteCustomer(int CustID)
        {

            var dataContext = new CustomersDataContext();
            var customer = from m in dataContext.Customers
                           where m.id == CustID
                           select m;
            dataContext.Customers.DeleteAllOnSubmit(customer);
            dataContext.SubmitChanges();


        }
    }
}

И мой jQuery будет выглядеть так:

$.ajax({
      type: "POST",
      url: "Delete.aspx/DeleteCustomer",
      data: "{CustID: " + parseInt(customer_id) + "}",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function(msg) {
                     AjaxSucceeded(msg);
               },
      error: AjaxFailed
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...