【发布时间】:2015-04-01 04:49:24
【问题描述】:
我正在通过以下方式使用 jQuery 的 datepicker 小部件(在我的 Master Page 中):
<script>
$(".datepicker").datepicker({
showAnim: 'fadeIn',
minDate: 0,
maxDate: "3M",
dateFormat: "dd-mm-yy"
});
</script>
我的内容页面中有一个asp:Repeater控件。在(我的内容页面的)C#代码中,我使用DateTime.TryParseExact方法来获取来自转发器控件的日期并按以下方式对其进行解析:
for (int i = 0; i < rptr.Items.Count; i++)
{
....
...//find other controls
...
TextBox txtDate = (TextBox)rptr.Items[i].FindControl("txtServiceDate");
DateTime eventDate = new DateTime();
if (txtDate.Text != null)
{
if (DateTime.TryParseExact(txtDate.Text, "dd-mm-yy", null, System.Globalization.DateTimeStyles.None, out eventDate))
{
cartObj.ServiceDate = eventDate; //code doesn't go here
}
else
{
cartObj.ServiceDate = DateTime.Now; //code reaches here!which means parsing failed
}
}
else
{
cartObj.ServiceDate = DateTime.Now;
}
...
....
...//other code
}
正如您在datepicker() 中看到的,我已将日期格式指定为dd-mm-yy', but this date doesn't get formatted in myTrParseExact()` 方法,即使指定的格式相同。
可能有什么问题?
编辑: 我添加了在调试模式下进入 TryParseExact 方法的屏幕截图:
【问题讨论】:
-
mm表示 .NET 自定义格式字符串中的分钟,而不是几个月...(我也强烈建议使用 yyyy 而不是 yy... 最好是 yyyy -MM-dd 而不是相反的方式......这样它就是 ISO-8601 格式。) -
@JonSkeet:我使用的是
yyyy-MM-dd格式。但这也没有得到解析,我想我不能在datepicker()中使用相同的格式,因为它不会产生所需的日期格式。 -
那么,通过给出一个无法解析的值的样本,将 jQuery 部分剪掉,并将其硬编码为一个简短但完整的程序来演示该问题。
-
你是否建议我从 datepicker() 中删除 dateFormat 选项??
-
不完全是,因为您将
null作为 IFormatProvider 传入。最好解析成CultureInfo.InvariantCulture。但除此之外,屏幕截图看起来还不错 - 但不是问题其余部分中显示的代码。如果在您更改为使用不变文化后仍然无法正常工作,我建议您尝试在一个简短但完整的示例中隔离该行为,最好是作为控制台应用程序。
标签: c# jquery asp.net datepicker