我目前正在使用jQuery Date Time选择器来选择要放入数据库的日期时间。使用日期时间选择器时,结果将在其绑定的文本框中正确显示(IE 27/09/2009 16:00)。但是,日期时间没有正确传递给MVC应用程序,并且正在收到01/01/0001 00:00:01。
处理此问题的方法需要单个参数 - 匹配m。页面强类型为匹配。
<p>
<label for="TimeAndDate">Time and date (click to reveal date and time picker):</label>
<br />
<%= Html.TextBox("TimeAndDate") %>
<%= Html.ValidationMessage("TimeAndDate", "*") %>
</p>
<script type="text/javascript">
$(function() {
$('#TimeAndDate').datepicker({
duration: '',
showTime: true,
constrainInput: false
});
});
</script>
为了长度,我省略了上面的脚本,但是它们出现在页面中。文本框和验证消息字段由visual studio生成。
我有一种感觉,我需要以某种方式将文本框中的字符串隐式转换为DateTime对象,然后再将其传递给方法,但我不知道如何。
对此的任何帮助都将非常感激
谢谢, 安迪
答案 0 :(得分:6)
当控制器操作的输入参数实际上不是DateTime对象时,通常会发生这种情况。
仔细检查控制器操作的输入参数名称是“TimeAndDate”,类型是String。
然后,您可以使用DateTime.Parse(String)将字符串解析为DateTime类型。
答案 1 :(得分:0)
以下是从页面接收数据的控制器操作:
[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MatchesAdd(Match m)
{
try
{
m.Against = Server.HtmlEncode(m.Against);
m.Info = Server.HtmlEncode(m.Info);
m.MatchID = Guid.NewGuid();
m.Played = false;
m.OurScore = 0;
m.EnemyScore = 0;
DM.AddMatch(m);
return RedirectToAction("Matches/List/Upcoming");
}
catch(Exception ex)
{
return Content(m.TimeAndDate.ToString());
}
}
此时,catch块纯粹用于调试。
正如您所看到的,我没有对DateTime对象进行解析,但是我在操作开始时设置了一个断点,并且从一开始就是错误的日期时间。当然我无法从中找回正确的日期?
答案 2 :(得分:0)
如果您尝试这样做会发生什么:
[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MatchesAdd(FormCollection values)
{
Match m = new Match();
try
{
UpdateModel<Match>(m);
// If your date still has not been picked up you could
// just uncomment this next line:
// m.TimeAndDate = DateTime.Parse(values["TimeAndDate"]);
DM.AddMatch(m);
return RedirectToAction("Matches/List/Upcoming");
}
catch(Exception ex)
{
return Content(m.TimeAndDate.ToString());
}
}
答案 3 :(得分:0)
试试这个
[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MatchesAdd(FormCollection collection)
{
dateTime date = DateTime.Parse(collection["TimeAndDate"].ToString())
return view();
}
这会给你约会。
答案 4 :(得分:0)
Andy表示我怀疑这是因为jQuery使用的默认日期格式。随着您的示例代码在我的PC上运行,我得到12/22/2012(当前日期是美国格式),我在澳大利亚。您可以使用dateFormat:
更改jQuery使用的日期格式<script type="text/javascript">
$(function() {
$('#TimeAndDate').datepicker({
duration: '',
showTime: true,
constrainInput: false,
dateFormat: "dd M yy"
});
});
</script>
您也可能希望在此处看到: MVC DateTime binding with incorrect date format