【发布时间】:2019-02-08 12:46:32
【问题描述】:
我正在制作一个从 SQL 数据库中提取一些信息的网站。 在尝试查询之前,我制作了一个模型来验证我是否拥有所需的信息。这意味着(如果一切顺利)该方法将始终解析并且 Model.IsValid 将为真。查询是获取两个给定日期之间的所有行。
现在我的问题来了 - 当它进入调用查询的 ActionResult 时,我首先要检查返回的行数是否小于 1000。
如果小于 1000,我希望它显示带有行的视图,但是如果大于 1000,我希望显示一条错误消息,告诉用户缩小搜索条件。
我可能会以完全错误的方式解决这个问题,我最初的想法是“简单地”将验证器更改为不再有效。这将自动触发来自模型的错误消息。在四处寻找之后,这似乎是不可能的。
有人知道如何解决这个问题吗?我的方法完全错误吗?
验证器模型:
public class DateValidator
{
[Required]
public DateTime StartDateTime { get; set; }
[Required]
public DateTime EndDateTime { get; set; }
}
动作结果:
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” - 然后让它返回一个空的局部视图以及调用获取列表的方法item,或返回包含错误消息的局部视图。看起来应该/可能是一个更简单或更聪明的解决方案。
我再次四处寻找,但正如我也提到的,我可能只是看错了。
提前致谢。
【问题讨论】:
标签: asp.net asp.net-mvc