1

私は何か間違ったことをしていますか?すべて問題ないように見えますが、レコードはデータベースから削除されません:

C#

    @{
    WebSecurity.RequireAuthenticatedUser();

    myModel.OSFEntities database = new myModel.OSFEntities();

    var productInformation = Request["Pi"];

    int productId = Convert.ToInt32(productInformation.Substring(0, productInformation.LastIndexOf("-")));
    string productType = productInformation.Substring(productInformation.LastIndexOf("-", productInformation.Length)).Replace("-", String.Empty);
    var userId = WebSecurity.CurrentUserId;
    DateTime date = DateTime.Now;
    int quantity = 1;
    string quoteId = "";

    if (Request["Action"] == "Remove")
    {
        if (Session["QuoteId"] != null)
        {
            quoteId = (String)Session["QuoteId"];

            myModel.Quote quotes = database.Quotes.FirstOrDefault(
                q => q.UserId == userId && q.QuoteId == quoteId && q.ProductId == productId && q.ProductType == productType);

            database.Quotes.DeleteObject(quotes);
            database.SaveChanges();
        }
    }
}

タイプスクリプト:

function RemoveProductFromCart(e) {
    // Remove from their Cart.
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
            if (xhr.status == 200) {
                // The data is now stored in the responseText.
                // Change value in textbox to 0 so user knows it's been
                // removed from their cart.
                var el = <HTMLInputElement>document.getElementById(e.id + "-TB");
                if (el != null) {
                    el.value = "0";
                }
            }

            else {
                // Server responded with a different response code.
                alert(xhr.statusText);
            }

        }
    }

    var parameters = "Pi=" + encodeURIComponent(e.id) + "&" + "Action=Remove";

    xhr.open("POST", "../Cart.cshtml");
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.setRequestHeader("Content-length", parameters.length.toString());
    xhr.setRequestHeader("Connection", "close");
    xhr.send(parameters);

    return e.id;
}

F12Dev Tools を使用してデバッグしているときに、次のように表示されます。

ここに画像の説明を入力

...これは、私のC#コードに何か問題があると私に信じさせます。データベースから削除されないのはなぜですか?

4

1 に答える 1

1

いくつか提案があります。

このような場合、リクエストアイテムの1つが思ったとおりではない可能性が常に高いため、アクションまたは見積もりIDのいずれかにサプライズが含まれている可能性があります。ブレークポイントを使用してそれらをチェックできます。

次にチェックする項目myModel.Quote quotesは、一致した見積もりオブジェクトが含まれていることです。おそらく、IDが正しい場合でも(たとえば、現在のユーザーにリンクされていない、製品タイプが異なるなど)、そこにあるフィルターの1つが除外されています。

使用していることに気づきました...

database.Quotes.DeleteObject(quotes);
database.SaveChanges();

つまりQuotes、2番目ではなく、最初に使用します。との呼び出しを同じコンテキストに対して行うべきではSaveChangesありDeleteObjectませんか?

于 2012-10-31T11:25:00.863 に答える