0

我有一个表单,允许用户输入时间值(例如,执行某些任务所花费的时间)。业务要求是以 hh:mm 格式或十进制格式输入时间。在任何一种情况下,都可能有相当多的客户端 javascript 用于显示“帮助”——显示总数、验证其他输入等。

因此,例如,一个用户可能会输入“8:30”来表示八小时三十分钟,而另一个用户可能会输入“8.5”来表示相同的意思。我正在寻找可以让我将表单/验证重复保持在最低限度的东西。

使用模型和视图解决此问题的最佳方法是什么?

4

2 回答 2

2

允许这两种格式的正则表达式不会那么复杂。我会通过javascript在客户端执行那个简单的验证。除此之外,您可能希望为此添加一些业务验证(在业务对象级别)。

于 2011-10-11T16:46:09.507 回答
0

我使用 jQuery 创建了一个滑块,可以以正确的格式更改输入框中的时间。在我的视图文件 Create.aspx 中,将以下 jquery 函数放在正文开头的某个位置。

<script>
$(function () {
    $("#slider").slider({
        value: 9,
        min: 0,
        max: 1440,
        step: 15,
        slide: function (event, ui) {
            var hours = Math.floor(ui.value / 60);
            var minutes = ui.value - (hours * 60);
            var ampm = "AM";

            if (hours == 12) { ampm = "PM"; } 
            else if (hours == 0) { hours = 12; ampm = "AM"; }
            else if (hours > 12) { hours = hours - 12; ampm = "PM"; }

            if (hours < 10) hours = '0' + hours;
            if (minutes < 10) minutes = '0' + minutes;
            $("#work_StartTime").val(hours + ':' + minutes + ' ' + ampm);
        }
    });
});

</script>

然后在同一页面的正文中在文本框附近放置一个 div 用于时间输入。一个滑块将显示在该 div

<div class="editor-field">
    <%: Html.EditorFor(model => model.work.StartTime)%>
        <div id="slider"></div>
            <%: Html.ValidationMessageFor(model => model.work.StartTime)%>
        </div>

这会给你一个滑块。在上面的 javascript 代码中更改 step:15,增量为 15 分钟。这显然是客户端验证。当然,还应该实现服务器端验证。

于 2012-03-04T11:18:38.237 回答