Question

J'ai 5 entités différentes pour lesquelles des données dynamiques (avec LINQTOSQL) ont été générées. Lors de l'insertion (Insert.aspx) de l'une de ces entités, en cas d'erreur, je souhaite informer l'utilisateur qu'une erreur s'est produite et éventuellement afficher un message d'erreur générique.

1) Je ne parle pas d'erreurs de champ obligatoires courantes, mais de quelque chose comme "violation de contrainte unique"

.

2) Je peux le faire pour chaque page séparément en faisant quelque chose comme ceci:

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) MAIS, je souhaite créer quelque chose de très générique qui fonctionnera pour toutes les insertions de toutes les entités

Était-ce utile?

La solution 3

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

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

}

Autres conseils

Vous pouvez personnaliser la validation en créant un gestionnaire d'événements dans la 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.");
        }

    }
}

Toutes les exceptions de validation levées dans le modèle de données sont interceptées par le contrôle DynamicValidator. Les modèles de page inclus dans un projet Dynamic Data contiennent un contrôle DynamicValidator, qui affiche les erreurs de validation sur la page.

Je ne peux pas tester cela dans votre situation, mais vous pouvez remplacer la méthode SubmitChanges .

 public partial class MyNorthwindDataContext : NorthwindDataContext
 {

  public MyNorthwindDataContext()
  {

  }

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

   base.SubmitChanges(failureMode);
  }
 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top