Frage

Ich habe viele Möglichkeiten ausprobiert, dies auszuführen, aber es passiert nicht. Hier ist der Deal. Ich habe Daten in Tabellenzeilen angezeigt. Jede Zeile hat ihre ID für die ID der Person, die ich löschen möchte. Ich benutze JQuery, um diese ID aus der Reihe zu sammeln, in der sich mein Knopf befindet. Hier ist der Code, wie ich das mache. Es funktioniert nur, dass ich nur schreibe, damit Sie einen Einblick in das erhalten, was ich erreichen möchte:

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

Wenn ich es mit Alarm testet, funktioniert es, hier ist der schwierige Teil, den ich einfach stecke. Ich habe die Datei namens Delete.aspx hier ist sein Inhalt

<%

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

Jetzt versuche ich, die Werte von Delete.aspx an die Person mit einer bestimmten ID zu senden, und es funktioniert, indem es delete.aspx? Value = 7 im Browser eingreift. Es löscht Person mit ID 7. Jetzt ist hier dort. Ich steckte wirklich wirklich fest. Von default.aspx versuche ich delete.aspx zu erreichen und die Person -ID mit jQuery wie folgt zu übergeben:

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

         });   

Wenn ich nun das Ergebnis auf die Schaltfläche klicke und die Löschung bestätige, erhalte ich "500 interner Serverfehler", ist dies behoben oder gibt es noch eine andere einfache Möglichkeit, dasselbe zu tun?

Vielen Dank


Ich habe den Code geändert. Aber ich brauche immer noch Hilfe. Ich fühle mich so nah, dass ich mich zumindest in die richtige Richtung weise.

Hier ist meine 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();


        }
    }
}

Hier ist mein delete.aspx

irgendwelche Ideen ? Danke

War es hilfreich?

Lösung

Der "500 interne Serverfehler" tritt normalerweise auf, da Sie einen serverseitigen Code haben, der entweder nicht korrekt kompiliert oder eine ungehandelte Ausnahme ausgelegt hat.

Ich würde vorschlagen, dass Sie vielleicht ein paar Änderungen ausprobieren möchten:

Verschieben Sie Ihre Löschroutine auf eine bestimmte Methode, die mit dem [WebMethod] -attribut dekoriert ist. Stellen Sie sicher, dass Ihr Code system.web.services enthält.

Lassen Sie Ihren JQuery Ajax -Anruf "/delete.aspx/mydeletemethod" anstelle der gesamten Seite enthalten.

Haben Sie über die Sicherheit für diese Anwendung nachgedacht? Was passiert, wenn jemand Ihren Customer_ID fängt und sie mit Firebug im Fliege ändert?

Bearbeiten: OK, hier ist, was ich für den serverseitigen Code vorschlagen würde

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


        }
    }
}

Und mein jQuery würde so aussehen:

$.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
 });
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top