2009-08-16 3 views
0

Я пытаюсь выяснить, как уведомить пользователя, какое поле не удалось проверить. Я устанавливаю LINQ to SQL class datacontext для доступа к базе данных с страниц ASP.net. Поскольку пользовательский ввод будет осуществляться с помощью форм веб-интерфейса и импорта из файлов Excel, я бы хотел написать логику проверки в одном месте. Идея этого заключается в том, когда я импортирую из excel. Я соберу сообщения об ошибках для каждой строки и покажу резюме. Логическое место, похоже, расширяет класс, сгенерированный LINQ to SQL. По большей части документации и примеров, я должен сделать что-то вроде этого:ErrorProvider (из Windows Forms) для ASP.net и linq-to-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 Forms Link1, если я определяю компонент ErrorProvider в форме и устанавливаю его свойство DataSource в ваш BindingSource, исключение будет указано красным кругом справа от проверяемого элемента управления. Всплывающая подсказка этого красного круга покажет сообщение об исключении.

Есть ли что-то подобное для страниц ASP.net? Я использую элемент управления 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; 
     } 
    } 
} 

Я на самом деле зациклен на том, как отобразить сообщение об ошибке в поле. Вот почему я искал что-то вроде ErrorProvider. Я уже использую события вместо исключений для записи ошибок. Любая идея как пометить соответствующее поврежденное поле из файла codebehind?

Любая помощь приветствуется.

ответ

1

Что мы сделали в прошлом, просто есть коллекция ошибок в DataContext, расширьте его, просто добавив что-то вроде List<ValidationError>. Тогда все, что вам нужно сделать, это переопределить SubmitChanges() и проверить, есть ли у вас какие-либо ошибки проверки, и решите прервать, бросить их, обрабатывать, однако вы действительно хотите в этот момент ... все до звонка base.SubmitChanges()

Мы находимся в ASP.Net для каждого жизненного цикла запроса, но если ваш контекст работает дольше, обязательно очистите список ошибок.

Полезно, чтобы ваш класс/объекты ValidationError содержал ссылку на общую базу или интерфейс, которые реализуются всеми вашими классами, поэтому вы можете указать на объект позже, если необходимо, при ошибке. (например, получите идентификатор для размещения меток ошибок или другой информации в нужном месте).

Примеры классов:

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; } 
} 
+0

+1, очень чистое решение – JoshJordan

0

Там является ValidationSummary управления, который работает с индивидуальной проверки управления, чтобы отобразить список ошибок. Но действие WinForms ErrorProvider выполняется в ASP.NET с помощью отдельных элементов управления проверкой, которые получены от элемента управления Label

Смежные вопросы