代码之家  ›  专栏  ›  技术社区  ›  naim5am

用于ASP.NET和LINQ to SQL的错误提供程序(从Windows窗体)?

  •  0
  • naim5am  · 技术社区  · 15 年前

    我正在试图找出如何通知用户哪个字段验证失败。 我设置Linq to SQL类DataContext以从ASP.NET页访问数据库。由于用户输入将来自Web界面表单和从Excel文件导入,所以我希望在一个地方编写验证逻辑。这背后的想法是当我从Excel导入时。我将收集每行的错误消息,并以某种方式显示摘要。逻辑位置似乎将Linq生成的类扩展到了SQL。根据大多数文档和示例,我应该这样做:

    public partial class Customer 
    {
      partial void OnTitleChanging(string value) 
      {
        if (!Char.IsUpper(value[0])) {
          throw new ValidationException(
           "Title must start with an uppercase letter.");}
      }
    }
    

    这种方法的问题是,验证将在第一个失败的字段上停止。

    在Windows窗体中 Link1 ,如果我在表单中定义了一个ErrorProvider组件,并将其DataSource属性设置为您的BindingSource,则该异常将由验证控件的右红色圆圈指示。此红色圆圈的工具提示将显示异常消息。

    ASP.NET页面是否有类似的内容?我在ListView中使用ListView控件和内联编辑。


    更新: -实际上我做了一些和尼克·卡弗建议的类似的事情。 Link2 .我没有抛出异常,而是记录了一条错误消息。

    public partial class PQSSClassesDataContext    
    {
    public partial class ErrorFeilds
      {
          private static List<string> Messages = new List<string>();
          public void AddErrorMessage(string message)
          {
              Messages.Add(message);
          }
          public List<string> GetErrorMessages() 
          {
              return Messages;
          }
      }
    }
    

    实际上,我一直在研究如何将错误消息映射到字段。这就是为什么我要找类似错误提供者的东西。我已经在使用事件而不是异常来记录错误。知道如何从代码隐藏文件中标记相应的失败字段吗?

    感谢您的帮助。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Nick Craver    15 年前

    我们过去所做的只是在DataContext上有一个错误集合,扩展它,只是添加类似 List<ValidationError> . 那么你所要做的就是重写 SubmitChanges() 然后检查是否有任何验证错误,并决定中止、抛出它们,在调用之前处理您真正希望的所有错误。 base.SubmitChanges()

    我们正处于每个请求的ASP.NET生命周期中,但是如果您的上下文更长,请确保清除错误列表。

    对于validationError类/对象来说,包含对所有类实现的公共基或接口的引用非常方便,因此如果需要,可以稍后从错误中指向该对象。(例如,获取将错误标签或其他信息扔到正确位置的ID)。

    示例类:

    public class ValidationError {
      public string Message { get; set; }
      public IBase { get; set; }
    }
    
    public interface IBase {
      public long ID { get; set; }
      public DateTime DateModified { get; set; }
    }
    
        2
  •  0
  •   John Saunders    15 年前

    ValidationSummary 控件,它与各个验证控件一起显示错误列表。但Winforms的行动 ErrorProvider 在ASP.NET中由各个验证控件执行,这些控件从 Label 控制