验证两个依赖日期

时间:2017-02-09 15:24:11

标签: asp.net validation date razor asp.net-mvc-5

我有两个日期值,我需要验证。这个验证是复合的:一个日期需要比另一个更快(想想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&nbsp;</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&nbsp;</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>

2 个答案:

答案 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>