【发布时间】:2019-12-30 23:55:08
【问题描述】:
为什么我的视图在将数据保存到控制器时没有将数据绑定到模型中,这真的很困惑。我使用 Jquery Datetime Picker 创建了这个 UI。在提交按钮消息引发 “Nullable object must have a value” 后尝试调试,并且此错误显示在我的日期开始和日期结束视图中,因为这些数据从未绑定(无值/null)到模型中。
基于该 UI,我想使用 EF 将这些数据保存到 sql server 数据库中。我的模型是日期时间类型。
我的模特:
public class OvertimeRequestModel
{
public int OvertimeId { get; set; }
public string OvertimeCode { get; set; }
public DateTime? DateStart { get; set; } //datetime format
public DateTime? DateEnd { get; set; } //datetime format
public string Notes { get; set; }
}
我在视图中使用了texboxfor:
<div class="input-group col-xs-10 col-sm-5">
@Html.TextBoxFor(m => m.DateStart, @"{0:MM/dd/yyyy HH:mm:ss}", new { @class = "form-control", @id = "date-timepicker1", @placeholder = "select date start", required = "required", @autocomplete = "off" })
<span class="input-group-addon">
<i class="fa fa-clock-o bigger-110"></i>
</span>
</div>
<div class="input-group col-xs-10 col-sm-5">
@Html.TextBoxFor(m => m.DateEnd, @"{0:MM/dd/yyyy HH:mm:ss}", new { @class = "form-control", @id = "date-timepicker2", @placeholder = "select date End", required = "required", @autocomplete = "off" })
<span class="input-group-addon">
<i class="fa fa-clock-o bigger-110"></i>
</span>
</div>
我的javascript:
<script type="text/javascript">
//$(document).ready(function(){
jQuery(function ($) {
if (!ace.vars['old_ie']) $('#date-timepicker1').datetimepicker({
format: 'MM/DD/YYYY HH:mm:ss',//use this option to display seconds
icons: {
time: 'fa fa-clock-o',
date: 'fa fa-calendar',
up: 'fa fa-chevron-up',
down: 'fa fa-chevron-down',
previous: 'fa fa-chevron-left',
next: 'fa fa-chevron-right',
today: 'fa fa-arrows ',
clear: 'fa fa-trash',
close: 'fa fa-times'
}
}).next().on(ace.click_event, function () {
$(this).prev().focus();
});
if (!ace.vars['old_ie']) $('#date-timepicker2').datetimepicker({
format: 'MM/DD/YYYY HH:mm:ss',
icons: {
time: 'fa fa-clock-o',
date: 'fa fa-calendar',
up: 'fa fa-chevron-up',
down: 'fa fa-chevron-down',
previous: 'fa fa-chevron-left',
next: 'fa fa-chevron-right',
today: 'fa fa-arrows ',
clear: 'fa fa-trash',
close: 'fa fa-times'
}
}).next().on(ace.click_event, function () {
$(this).prev().focus();
});
});
</script>
我的控制器:
OvertimeRequest over = new OvertimeRequest();
over.OvertimeCode = model.OvertimeCode;
over.DateStart = model.DateStart; //always get null value
over.DateEnd = model.DateEnd; //always get null value
over.Notes = model.Notes;
db.OvertimeRequest.Add(over);
db.SaveChanges();
需要建议,谢谢。
【问题讨论】:
-
如果您不使用
datetimepicker会发生什么?只是为了确保它不会干扰绑定,请尝试将其移除并检查绑定是否有效。 -
如果是必填字段,为什么可以为空?
-
@RonBeyer 这只是实体框架的反映。
-
@PriyankPanchal 当我尝试删除
datetimepicker时,我仍然得到 Null 值 -
over.DateStart- 这是否可以作为model.DateStart为空?如果不是,那么您必须分配值而不是像model.DateStart.value这样的对象。或者让实体模型中的日期对象也可以为空。您还可以进行一些空值检查,例如if(model.DateStart.Hasvalue),然后进行相应的分配。
标签: c# jquery asp.net-mvc datetimepicker