我有一个表单,允许用户输入时间值(例如,执行某些任务所花费的时间)。业务要求是以 hh:mm 格式或十进制格式输入时间。在任何一种情况下,都可能有相当多的客户端 javascript 用于显示“帮助”——显示总数、验证其他输入等。
因此,例如,一个用户可能会输入“8:30”来表示八小时三十分钟,而另一个用户可能会输入“8.5”来表示相同的意思。我正在寻找可以让我将表单/验证重复保持在最低限度的东西。
使用模型和视图解决此问题的最佳方法是什么?
我有一个表单,允许用户输入时间值(例如,执行某些任务所花费的时间)。业务要求是以 hh:mm 格式或十进制格式输入时间。在任何一种情况下,都可能有相当多的客户端 javascript 用于显示“帮助”——显示总数、验证其他输入等。
因此,例如,一个用户可能会输入“8:30”来表示八小时三十分钟,而另一个用户可能会输入“8.5”来表示相同的意思。我正在寻找可以让我将表单/验证重复保持在最低限度的东西。
使用模型和视图解决此问题的最佳方法是什么?
允许这两种格式的正则表达式不会那么复杂。我会通过javascript在客户端执行那个简单的验证。除此之外,您可能希望为此添加一些业务验证(在业务对象级别)。
我使用 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 分钟。这显然是客户端验证。当然,还应该实现服务器端验证。