Dynamic Data | LINQ to SQL | Allgemeine Validation
-
06-07-2019 - |
Frage
Ich habe 5 verschiedene Einheiten, für die dynamischen Daten (mit LinqToSql) generiert wurden. Auf Insert (Insert.aspx) von jedem dieser Einheiten, wenn ein Fehler auftritt, würde Ich mag Benutzer benachrichtigen, dass Fehler passiert ist und möglicherweise einige generische Fehlermeldung an.
1) Ich spreche nicht über regelmäßige Pflichtfeld Fehler aber so etwas wie „Unique Einschränkungsverletzung“
2) Ich kann es für jede Seite separat durch so etwas wie dies zu tun:
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) ABER, ich möchte etwas sehr generisch erstellt, die für alle Einsätze auf alle Unternehmen arbeiten
Lösung 3
public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
{
try
{
base.SubmitChanges(failureMode);
}
catch (Exception e)
{
throw new ValidationException("Something is wrong", e);
}
}
Andere Tipps
Sie können Validierung anpassen, indem Sie einen Ereignishandler in der ADO.NET Entity Framework-Klasse zu erstellen:
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.");
}
}
}
Jede Validierung Ausnahmen, die im Datenmodell geworfen werden, werden von der DynamicValidator Kontrolle gefangen. Die Seitenvorlagen mit einem Dynamic Data Projekt enthalten enthalten eine DynamicValidator Steuerung, die die Validierungen Fehler auf der Seite angezeigt wird.
Ich kann nicht in vollem Umfang testen dies für Ihre Situation, aber Sie die SubmitChanges
Methode überschreiben könnte.
public partial class MyNorthwindDataContext : NorthwindDataContext
{
public MyNorthwindDataContext()
{
}
public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
{
//catch error logic here...
base.SubmitChanges(failureMode);
}
}