将BootStrap Datepicker从View返回到Controller时返回null。

12 浏览
0 Comments

将BootStrap Datepicker从View返回到Controller时返回null。

首先,我解释一下我的问题。我们正在使用BootStrap DatePicker。在提交Html.BeginForm后,它会将选择的日期发送到控制器并更新开发系统(个人电脑)中的数据库,但是相同的代码在测试服务器和客户端系统上无法工作。在测试服务器上进行调试后,我发现DatePicker将NULL返回给控制器,当我选择日期超过12天时,例如(2014年10月13日),而选择少于12天的日期,例如(2014年10月12日),则工作正常。

更改了文化设置为不变的,但它仍然将NULL值返回给控制器。

DatePicker定义在BeginForm内部,其他控件返回正确的值,只有DatePicker不起作用。

代码如下:

Html.BeginForm("MergeTeacherDetails","Profile", FormMethod.Post, new { id = "FormTeacherDetails" })))

DatePicker格式更改为('dd/mm/yyyy')

视图代码如下:

@Html.LabelFor(m => m.DOB, "DOB", new { @class = "control-label"})

@{System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;

@Html.TextBoxFor(model => model.DOB, new { placeholder = "DOB",@readonly = "readonly",@class="ReadOnly" })}

JavaScript代码如下:

$('#DOB').datepicker({ startView: 2, autoclose: true, format: "dd/mm/yyyy", endDate: '@DateTime.Now.ToString("dd/MM/yyyy")', changeYear: true, changeMonth: true, weekStart: 1 });

DAL代码如下:

public Nullable DOB { get; set; }

控制器代码如下:

public ActionResult MergeTeacherDetails(Staffs objStaffs)

{

int res = _staffRepository.InsertOrUpdate(objStaffs);

if(res>0)

{

_mapStaffRepository.SaveMapStaff(objStaffs.StaffId);

}

return RedirectToAction("/MyProfile/1");

}

在控制器的参数objStaffs.DOB中返回为NULL。

请帮助我解决这个问题,提前感谢您的帮助。

0
0 Comments

问题出现的原因是应用程序在使用模型绑定器(将发布的值绑定到objStafss模型时)时,需要确保使用期望的日期格式。默认情况下,模型绑定器将使用当前的区域设置格式,而在测试/客户端机器上将使用mm/dd/yyyy格式,而在您的机器上可能是dd/mm/yyyy格式。

解决方法是创建一个自定义的模型绑定器,它始终期望以dd/mm/yyyy格式的日期(在.NET中表示为dd/MM/yyyy)。然后告诉MVC使用您的模型绑定器。您可以在全局.asax的Application_Start事件中将其用作应用程序的全局绑定器。

此外,您还需要确保在将现有值呈现到文本框时使用的格式是dd/mm/yyyy。您可以使用DisplayFormatAttribute来实现这一点,但它只适用于EditorFor而不适用于TextBoxFor。您可以创建一个自定义辅助方法或自己的编辑模板来处理日期时间。

如果您使用的是MVC 5.1+,您可以添加DisplayFormat属性,并在代码中使用EditorFor来设置HTML属性,如placeholder或readonly。

以上就是关于"BootStrap Datepicker return null from View to Controller"问题的原因和解决方法的整理。

0