Domanda

Ho 5 entità diverse per le quali sono stati generati dati dinamici (con LINQTOSQL). Su Inserisci (Insert.aspx) di una di queste entità, se si verifica un errore, vorrei informare l'utente che si è verificato l'errore e possibilmente mostrare un messaggio di errore generico.

1) Non sto parlando di errori di campo obbligatori regolari ma di qualcosa come " Violazione del vincolo univoco "

2) Posso farlo separatamente per ogni pagina facendo qualcosa del genere:

protected void DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e) {
    if (e.Exception == null || e.ExceptionHandled)
    {
        Response.Redirect(table.ListActionPath);
    }
    else
    {
        //OtherErrors is the label on the page
        OtherErrors.Visible = true;
        OtherErrors.Text = e.Exception.Message;
        OtherErrors.DataBind();
        e.ExceptionHandled = true;
        e.KeepInInsertMode = true;

    }
}

3) MA, voglio creare qualcosa di molto generico che funzioni per tutti gli inserti in tutte le entità

È stato utile?

Soluzione 3

    public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
{

    try
    {
        base.SubmitChanges(failureMode);
    }
    catch (Exception e)
    {
        throw new ValidationException("Something is wrong", e);
    }

}

Altri suggerimenti

È possibile personalizzare la convalida creando un gestore eventi nella classe ADO.NET Entity Framework:

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.DynamicData;
using System;
using System.Data;
using System.Data.Objects;

namespace AdventureWorksLTModel 
{
    public partial class AdventureWorksLTEntities 
    {
        partial void OnContextCreated() 
        {
            this.SavingChanges += new System.EventHandler(OnSavingChanges);
        }

        public void OnSavingChanges(object sender, System.EventArgs e) 
        {
            var stateManager = ((AdventureWorksLTEntities)sender).ObjectStateManager;
            var changedEntities = ObjectStateManager.GetObjectStateEntries (EntityState.Modified | EntityState.Added);

            // validation check logic
            throw new ValidationException("Something went wrong.");
        }

    }
}

Qualsiasi eccezione di convalida generata nel modello di dati viene rilevata dal controllo DynamicValidator. I modelli di pagina inclusi in un progetto di dati dinamici contengono un controllo DynamicValidator, che visualizza gli errori di convalida sulla pagina.

Non posso testarlo completamente per la tua situazione, ma potresti ignorare il metodo SubmitChanges .

 public partial class MyNorthwindDataContext : NorthwindDataContext
 {

  public MyNorthwindDataContext()
  {

  }

  public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
  {
   //catch error logic here...

   base.SubmitChanges(failureMode);
  }
 }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top