Я делаю сайт, который извлекает некоторую информацию из базы данных SQL.Я сделал Модель для проверки того, что у меня есть информация, которая мне нужна, прежде чем я попробую запрос.Это означает (если все пойдет правильно), метод всегда разрешается, и Model.IsValid будет истинным.Запрос состоит в том, чтобы получить все строки между двумя указанными датами.
Теперь возникает моя проблема - когда он попадает в ActionResult, где он вызывает запрос, я сначала хочу проверить, не является ли количество возвращаемых строк меньше 1000.
Если это <1000, я хочу, чтобы оно показывало представление со строками, однако, если оно больше 1000, я хочу, чтобы отображалось сообщение об ошибке, которое говорит пользователю сузить критерии поиска. </p>
Я мог бы пойти по этому пути совершенно неправильно, и моей первоначальной идеей было «просто» изменить валидатор, чтобы он больше не действовал.Который автоматически вызовет сообщение об ошибке от модели.Хотя после поиска вокруг это не представляется возможным.
У кого-нибудь есть идеи, как это сделать?Совершенно неверно в моем подходе?
ValidatorModel:
public class DateValidator
{
[Required]
public DateTime StartDateTime { get; set; }
[Required]
public DateTime EndDateTime { get; set; }
}
ActionResult:
public ActionResult GetListFromDateRange(DateValidator validator)
{
RangeParent parent = new RangeParent();
if (ModelState.IsValid)
{
int queryCount =
repository.GetCountFromDateRange(validator.StartDateTime,
validator.EndDateTime);
if (queryCount < 1000)
{
parent.Meters =
repository.GetListFromDateRange(validator.StartDateTime,
validator.EndDateTime);
return View(Constants.ViewNames.DisplayRangeData, parent);
}
else
{
//display error message telling user to narrow the datetime range
return new EmptyResult();
}
}
return View(Constants.ViewNames.IndexView);
}
И последний из двух запросов, которые я сейчас использую:
public List<Meter> GetListFromDateRange(DateTime startDateTime, DateTime endDateTime)
{
using (dbContext = new HeatDataVerifEntities())
{
return dbContext.Meters.Where(p => p.Created >= startDateTime && p.Created <= endDateTime).OrderBy(p => p.Created).ToList();
}
}
public int GetCountFromDateRange(DateTime startDateTime, DateTime endDateTime)
{
using (dbContext = new HeatDataVerifEntities())
{
return dbContext.Meters.Where(p => p.Created >= startDateTime && p.Created <= endDateTime).Count();
}
}
Еще одна вещь, которую я рассмотрел, - это создать еще один ActionResult, который запускает проверку размера строки, которую я бы назвал вместо GetListFromDateRange, и затем заставить либо вернуть пустое частичное представление вместе с вызовом метода для получения спискаэлемент или возвращая частичное представление, в котором есть сообщение об ошибке.Казалось, что это должно быть более простым или более разумным решением.
Опять же, я искал вокруг, но, как я уже упоминал, я мог бы просто просто смотреть на это неправильно.
Заранее спасибо.