【发布时间】:2014-02-20 10:34:14
【问题描述】:
我有一个 WCF 合同,其中包含 3 个 DateTime? 参数。在我的页面上,我使用 jquery 来传递一个包含这 3 个日期的 javascript 对象。当 javascript 不为空时,服务仍将其接收为空。它们有时确实需要为 Nullable,所以我不能直接删除它。
C#:
public class Search {
public String FirstName { get; set; }
public String LastName { get; set; }
public DateTime? DateOfBirth { get; set; }
public int? OrderID { get; set; }
public DateTime? From { get; set; }
public DateTime? To { get; set; }
}
JS:
var search = {};
search.FirstName = $('#SearchFirst').val() || null;
search.LastName = $('#SearchLast').val() || null;
search.DateOfBirth = $('#SearchDOB').val() || null;
search.From = after;
search.To = before;
search.OrderID = null;
$.ajax({
url: url,
dataType: "json",
data: search,
async: true,
cache: false,
success: function (data) {
$('#SearchLoading').hide();
DisplaySearchResults(data);
},
type: "Post"
});
我正在使用一些测试值,例如new Date('10/14/2013') 用于before 和new Date('10/15/2013') 用于after。
Fiddler 报告 POST 正文如下所示:
FirstName=&LastName=&DateOfBirth=&From=Mon+Oct+14+00%3A00%3A00+MDT+2013&To=Tue+Oct+15+00%3A00%3A00+MDT+2013
FirstName 和 LastName 等其他字段正在正常通过。目前,OrderID 将始终为空,但日期全部为空,没有警告或错误。我能做什么?
【问题讨论】:
-
我看到您的 AJAX 调用中没有
contentType: 'application/json;',;这可能是问题吗? -
@rae1 如果他用正确的 RequestFormat 属性修饰了他的 OperationContract,那么他不需要显式设置它。我认为这可能与 DateTime 转换不可接受的日期格式有关。
-
@crush 它只需要是一个日期,而不是一个完整的日期时间。我应该如何为服务构造一个字符串以作为没有时间的日期?
-
@CoreyOgburn 我尝试找出所有可接受的格式可以由 JSON DataContractSerializer 自动转换,但我还没有找到任何东西。我知道 DateTime.parse 需要 MM/DD/YYYY 中的字符串,但它也可能支持其他格式;此外,我什至不确定它是否用于 JSON 序列化。我只会听从对序列化过程有更深入了解的人。
-
您也可以在传递日期时尝试使用 toUTCString() 方法。例如:search.From = start.toUTCString()
标签: c# javascript wcf