Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [4.0-C#] Asp.net mvc: problema con delete action

    ho un problema con la Delete action.
    come modello uso EF ed ho aggiunto già la pagina index e details aggiungendo la tabella di riferimento e alcune SP.
    nel controller ho messo questo:
    codice:
            public ActionResult Delete(int id)
            {
                try
                {
                    var delSito = ent.sitis.First(s => s.sito_ == id);
                    ent.DeleteObject(delSito);
                    ent.SaveChanges();
                    return RedirectToAction("Index");
                }
                catch
                {
                    return View();
                }
            }
    poi ho creato la view Delete fortemente tipizzata e di tipo Delete.
    se nella Index clicco sul link Delete succede una cosa strana: mi compare questa pagina di errore:
    Object reference not set to an instance of an object.

    con riferimento a questo punto della pagina:
    codice:
            <div class="display-field">
                <%: Model.sito_ %></div>
    il problema però è che cmq il record viene cancellato ma nn ho il controllo se nn voglio più cancellarlo.
    sapete aiutarmi??
    nn sono riuscito a trovare una soluzione.

  2. #2
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    Per passare i dati ad una view prima di richiamarla devi valorizzare la dictionary VieData nel caso di una view non tipizzata o viewData.Model nel caso di una view tipizzata. Se non lo fai il model è null.
    Per capirci, prima di richiamare la view dovresti scrivere qualcosa tipo:
    codice:
    ViewData.Model = Sito;
    Detto questo non ho ben capito qual'è il tuo intento, se vuoi che l'utente possa confermare l'eliminazione con un alert allora devi ricorrere a javascript ma lo devi fare nella view che renderizza il pulsante o link di delete (nella view dell'Index o del Details).
    Oppure l'altra strada (con un postback in piu) è creare un action Delete() GET che non fa alro che richiamare il record dal context e passarlo ad una view che visualizzati i dati chiede la conferma dell'eliminazione; e un action Delete POST (richiamabile dal tasto "Conferma" della view precedente) che cancella effettivamente il record.

    L'action che hai scritto tu cancella direttamente il record prima ancora di richiamare qualsiasi view.

  3. #3
    allora, quell'errore nn compare più.
    però adesso mi cancella le voci direttamente senza passare per la vista di conferma che mi ha creato:
    codice:
            //
            // GET: /Decoder/Delete/5
     
            public ActionResult Delete(int id)
            {
                try
                {
                    var delSito = ent.sitis.First(s => s.sito_ == id);
                    ViewData.Model = delSito;
                    ent.DeleteObject(delSito);
                    ent.SaveChanges();
                    return RedirectToAction("Index");
                }
                catch
                {
                    return View();
                }
            }
    
            //
            // POST: /Decoder/Delete/5
    
            //[HttpPost]
            //public ActionResult Delete(int id, FormCollection collection)
            //{
            //    try
            //    {
            //        return RedirectToAction("Index");
            //    }
            //    catch
            //    {
            //        return View();
            //    }
            //}
    io già uso il metodo in GET (o almeno credo di aver capito così).
    io vorrei che al click sul link prima mi compaia la pagina "di riepilogo" (la vista Delete.aspx) e poi da li procedere alla cancellazione.

  4. #4
    fatto:
    codice:
            //
            // GET: /Decoder/Delete/5
    
            public ActionResult Delete(int id)
            {
                try
                {
                    var delSito = ent.TNW_select_siti().First(s => s.sito_ == id);
                    if (delSito != null)
                    {
                        return View("Delete", delSito);
                    }
                    else
                    {
                        return View();
                    }
                }
                catch
                {
                    return View();
                }
            }
    
            //
            // POST: /Decoder/Delete/5
    
            [HttpPost]
            public ActionResult Delete(int id, FormCollection collection)
            {
                var delSito = ent.sitis.First(s => s.sito_ == id);
                try
                {
                    if (delSito != null)
                    {
                        ent.DeleteObject(delSito);
                        ent.SaveChanges();
                        return RedirectToAction("Index");
                    }
                    else
                    {
                        return View();
                    }
                }
                catch
                {
                    return View();
                }
            }
    grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.