如何在 ASP 中使用 jQuery Datepicker 并将值保存在 MS SQL DateTime 变量中
How to Use jQuery Datepicker in ASP and save the value in MS SQL DateTime variable
我需要从 ASP.Net 页面收集日期和时间并将其传递给 MS SQL DateTime 变量。我应该在这里使用 jQuery 日期选择器。
所以我尝试使用 jQuery 日期选择器来收集日期,然后使用几个下拉菜单来记录时间,然后将所有三个连接起来以传递给 SQL 但它没有没用。
谁能指导我最好的流程是什么?
这是我手写的粗略指南..
我假设您正在使用 WebForms,但如果不是,适应 MVC 并不难。
jQuery 日期选择器有一个名为 altField 的选项,它会在日期选择器更改时更新您选择的字段。
您通常会将此字段设置为 HTML 标记中的隐藏字段。在 ASP.NET 中有一个名为 HiddenField
的服务器控件,它在页面上呈现一个隐藏的输入。所以在客户端,你会做这样的事情:
<!-- asp controls on the page -->
<asp:HiddenField runat="server" ID="dateHdn" ClientIDMode="Static"/>
<asp:TextBox runat="server" ID="dateTxt" ClientIDMode="Static"/>
<script type="text/javascript">
// document.ready shorthand
$(function() {
$('#dateTxt').datepicker({
altField: $('#dateHdn'),
altFormat: "yy-mm-dd"
});
});
</script>
然后在页面回发后,从服务器端的隐藏字段中检索值。如您所见,jQuery datepicker 使用的日期格式类似于 MS SQL 用于日期时间的日期格式(例如 ANSI SQL 格式:2012-06-18 10:34:09
)。只是为了确保您应该使用 var date = DateTime.Parse(dateHdn.Value);
来确保日期是有效的 DateTime。
对于时间的进一步要求,您应该使用单独的日期选择器/隐藏字段。然后执行类似下面的操作,从您通过解析日期创建的第一个 DateTime 对象创建一个新的 DateTime 对象,并从时间下拉列表(小时、分钟、秒)的值创建一个新的 TimeSpan 对象:
var hour = int.Parse(hour.SelectedValue);
var minute = int.Parse(minute.SelectedValue);
var second = int.Parse(second.SelectedValue); // or 0
TimeSpan ts = new TimeSpan(hour, minute , second); // hour value is 24hr i.e. 23 = 11pm
date = date.Date + ts;
您需要这样做,因为 DateTime 对象是不可变的(这意味着它们在创建后无法更改)。但是,您可以为引用分配一个新值。
希望对您有所帮助!
n.b。一旦一切正常,您应该使用 DateTime.TryParse()
,因为您永远无法确定隐藏字段中的值是否可解析,这将导致错误。与 int.TryParse()
相同
我需要从 ASP.Net 页面收集日期和时间并将其传递给 MS SQL DateTime 变量。我应该在这里使用 jQuery 日期选择器。
所以我尝试使用 jQuery 日期选择器来收集日期,然后使用几个下拉菜单来记录时间,然后将所有三个连接起来以传递给 SQL 但它没有没用。
谁能指导我最好的流程是什么?
这是我手写的粗略指南..
我假设您正在使用 WebForms,但如果不是,适应 MVC 并不难。
jQuery 日期选择器有一个名为 altField 的选项,它会在日期选择器更改时更新您选择的字段。
您通常会将此字段设置为 HTML 标记中的隐藏字段。在 ASP.NET 中有一个名为 HiddenField
的服务器控件,它在页面上呈现一个隐藏的输入。所以在客户端,你会做这样的事情:
<!-- asp controls on the page -->
<asp:HiddenField runat="server" ID="dateHdn" ClientIDMode="Static"/>
<asp:TextBox runat="server" ID="dateTxt" ClientIDMode="Static"/>
<script type="text/javascript">
// document.ready shorthand
$(function() {
$('#dateTxt').datepicker({
altField: $('#dateHdn'),
altFormat: "yy-mm-dd"
});
});
</script>
然后在页面回发后,从服务器端的隐藏字段中检索值。如您所见,jQuery datepicker 使用的日期格式类似于 MS SQL 用于日期时间的日期格式(例如 ANSI SQL 格式:2012-06-18 10:34:09
)。只是为了确保您应该使用 var date = DateTime.Parse(dateHdn.Value);
来确保日期是有效的 DateTime。
对于时间的进一步要求,您应该使用单独的日期选择器/隐藏字段。然后执行类似下面的操作,从您通过解析日期创建的第一个 DateTime 对象创建一个新的 DateTime 对象,并从时间下拉列表(小时、分钟、秒)的值创建一个新的 TimeSpan 对象:
var hour = int.Parse(hour.SelectedValue);
var minute = int.Parse(minute.SelectedValue);
var second = int.Parse(second.SelectedValue); // or 0
TimeSpan ts = new TimeSpan(hour, minute , second); // hour value is 24hr i.e. 23 = 11pm
date = date.Date + ts;
您需要这样做,因为 DateTime 对象是不可变的(这意味着它们在创建后无法更改)。但是,您可以为引用分配一个新值。
希望对您有所帮助!
n.b。一旦一切正常,您应该使用 DateTime.TryParse()
,因为您永远无法确定隐藏字段中的值是否可解析,这将导致错误。与 int.TryParse()