Pregunta

He intentado muchas formas de ejecutar esto, pero no está sucediendo ... aquí está el trato. Tengo datos mostrados en filas de la tabla, cada fila tiene su ID que representa la ID de la persona que quiero eliminar. Utilizo jquery para recopilar este ID de la fila donde se encuentra mi botón, aquí está el código de cómo lo hago, de su funcionamiento, solo escribo para que pueda obtener una idea de lo que estoy tratando de lograr:

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

Cuando lo pruebo usando la alerta funciona, aquí está la parte difícil. Simplemente me quedo atascado. Tengo un archivo llamado Delete.aspx aquí está su contenido

<%

cadena p = Solicitar [" valor "];     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();
%>

Ahora estoy tratando de enviar los valores a Delete.aspx para eliminar a una persona con un id en particular, y funciona escribiendo Delete.aspx? value = 7 en el navegador, borra una persona con id 7. Ahora aquí está donde estoy realmente atorado. Desde Default.aspx estoy tratando de llegar a Delete.aspx y pasar el ID de la persona usando jquery así:

$(".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);
             }

         });   

Así que ahora el resultado, cuando hago clic en el botón y confirmo la eliminación, aparece "500 Error interno del servidor", ¿se puede corregir o hay alguna otra forma sencilla de hacer lo mismo?

Gracias


He modificado el código ... pero aún necesito ayuda ... siento que estoy tan cerca que al menos me indica la dirección correcta ...

aquí está mi 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();


        }
    }
}

aquí está mi Delete.aspx

alguna idea? gracias

¿Fue útil?

Solución

El " 500 Error interno del servidor " por lo general ocurre porque tienes un código del lado del servidor que no se compiló correctamente o que lanzó una excepción no controlada.

Le sugeriría que quiera probar un par de cambios:

Mueva su rutina de eliminación a un método específico que esté decorado con el atributo [Método Web]. Asegúrese de que su código incluya System.Web.Services.

Haga que su llamada jQuery ajax incluya " /Delete.aspx/MyDeleteMethod" en lugar de toda la página.

¿Has pensado en la seguridad de esta aplicación? ¿Qué sucede si alguien atrapa a su customer_id y lo cambia sobre la marcha con Firebug?

EDITAR: Ok, esto es lo que sugeriría para el código del lado del servidor

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();


        }
    }
}

Y mi jQuery se vería así:

$.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
 });
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top