jQuery DateTime选择器和ASP.NET MVC

时间:2009-08-27 11:27:57

标签: jquery asp.net-mvc datetime

我目前正在使用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对象,然后再将其传递给方法,但我不知道如何。

对此的任何帮助都将非常感激

谢谢, 安迪

5 个答案:

答案 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>
  • jQuery:dd M yy = dd MMM yyyy(c#)
  • jQuery ddMM yy = dd MMMM yyyy(c#)

您也可能希望在此处看到: MVC DateTime binding with incorrect date format