我有两个日期值,我需要验证。这个验证是复合的:一个日期需要比另一个更快(想想StartingDate和FinishDate)。
我该如何验证?
基于此post,似乎会出现类似情况,一个推荐是使用MVC Foolproof Validation。这仍然是最好的选择吗?还有其他方法来验证这样的任务吗?
我在视图中的代码,如果它有帮助:
<div class="row">
<div class="col-md-3">
<div class="row">
<div class="col-md-5">
<span class="glyphicon glyphicon-calendar" aria-hidden="true"></span>
<span style="font-size:large;">Início </span>
</div>
<div class="col-md-7">
@Html.EditorFor(model => model.Inicio, new { htmlAttributes = new { @class = "form-control datetimepicker" } })
</div>
</div>
</div>
<div class="col-md-3">
<div class="row">
<div class="col-md-5">
<span class="glyphicon glyphicon-calendar" aria-hidden="true"></span>
<span style="font-size:large;">Fim </span>
</div>
<div class="col-md-7">
@Html.EditorFor(model => model.Fim, new { htmlAttributes = new { @class = "form-control datetimepicker" } })
</div>
</div>
</div>
</div>
<script>
<!--jQuery DateTimePicker-->
jQuery('.datetimepicker').datetimepicker({
format: 'd/m/Y H:i'
});
</script>
答案 0 :(得分:2)
我不明白为什么一个简单的JS解决方案在这里可以提供帮助,所以这里是:
<强> HTML:强>
<p>Start Date: <input type="text" id="datepicker1"></p>
<p>End Date: <input type="text" id="datepicker2"></p>
<button id="TestCondition">
Click Me!
</button>
<强> JS:强>
$(function() {
$("#datepicker1").datepicker();
});
$(function() {
$("#datepicker2").datepicker();
});
$("#TestCondition").click(function(){
alert($("#datepicker1").val());
alert($("#datepicker2").val());
if($("#datepicker2").val() < $("#datepicker1").val()){
alert("End Date must come after Start Date!");
}
});
这是一个小提琴:JSFiddle
在MVC中使用Controller的替代解决方案
将此页面提交给控制器后,您可以像这样进行检查(C#):
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult NameOfAction(ViewModel nameOfViewModel)
{
if(nameofViewModel.FinishDate <= nameofViewModel.StartDate)
{
ModelState.AddModelError("FinishDate", "Finish Date needs to be after the Start Date!");
return View(nameOfViewModel);
}
}
请告诉我这是否有帮助,或者是否需要更改。
答案 1 :(得分:0)
基于BviLLe_Kid的回答,我接受了,这就是我最终做的事情:
if (ModelState.IsValid)
{
if (nameofViewModel.FinishDate <= nameofViewModel.StartDate)
{
ModelState.AddModelError(string.Empty, "Error message here");
return View(nameofViewModel);
}
else {
//code for when validation is OK
}
}
在视图中:
<div style="color:red;">
@Html.ValidationSummary(true)
@Html.ValidationMessageFor(model => model.FinishDate)
</div>