javascript - MVC5 - 检查用于搜索日期字段的 2 个日期(文本框)之间的重叠

标签 javascript c# asp.net validation asp.net-mvc-5

我目前正在考虑创建一些搜索选项来过滤我的模型结果。我有一个 RunDate 字段,我想使用 2 个文本框字段来搜索该字段。

@Html.TextBox("StartDate", null, new { @class = "datefield form-control", type = "date" })
@Html.TextBox("EndDate", null, new { @class = "datefield form-control", type = "date" })

<input type="submit" class="btn btn-primary" value="Search" />

还有我的 Controller 索引任务

 public async Task<ActionResult> Index(int? jobId, int? page, DateTime? StartDate, DateTime? EndDate)
......
......
 if (StartDate.HasValue )
        {
            jobs = jobs.Where(s => s.RunAfter >= StartDate);
            pageNumber = 1;
        }
        if (EndDate.HasValue)
        {
            jobs = jobs.Where(s => s.RunAfter <= EndDate);
            pageNumber = 1;
        }

但是,如果日期重叠不正确,我想停止搜索,例如。开始日期 > 结束日期。

最好的方法是什么?我是否必须使用 Javascript 并将 validate() 添加到我的输入点击?

我调查过Request Validation但这现在已经过时了。

我还可以添加一个validationResult,例如

 if (StartDate > EndDate)
        {
            return new ValidationResult("EndDate must be greater than StartDate");
        }

但我不确定在哪里添加这个。那么基本上,使用最有效的方法验证这些表单字段的最佳方法是什么?

最佳答案

如果您将表单字段包装到 ViewModel 中,则该模型可以实现 IValidatableObject

public class SearchViewModel : IValidatableObject {
    public DateTime? StartDate { get; set; }
    public DateTime? EndDate { get; set; }
    // other properties ...

     // will be called automatically to check ModelState.IsValid
     public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {
         if (StartDate > EndDate) {
             yield return new ValidationResult("EndDate must be greater than StartDate", "EndDate");
         }
         // other checks here, also yield ValidationResult ...
     }
}

并在您的操作中检查 ModelState:

public async Task<ActionResult> Index(SearchViewModel postData) {
    if (!ModelState.IsValid) {
        // error handling, e.g. return View Index again (errors will already have been added)
    }
    // no error -> continue
}

可以在 Razor 中呈现错误列表,如下所示:

 @Html.ValidationSummary()

关于javascript - MVC5 - 检查用于搜索日期字段的 2 个日期(文本框)之间的重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35504221/

相关文章:

javascript - 下拉验证,焦点方法不起作用

javascript - 单击功能中输入字段值不变

javascript - 检查 URL 中是否存在 # 然后将其删除

c# - LINQ 一对多,3 级深度问题

c# - Entity Framework 与相同实体类型但具有不同关系类型的多对多关系

javascript - 使用 JavaScript 匹配精确的字符串

c# - .NET 核心 2.2 : xUnit Theory Inlinedata not working with enum values

c# - 在 HtmlHelper 中获取对应 View 关联的 Model

asp.net - 字段列表中名为 '' 的字段不明确

ASP.NET 如何从 CheckBox 显示 AjaxControlToolkit 模态弹出窗口