【发布时间】:2014-02-11 17:44:30
【问题描述】:
我知道这个问题已经被问过很多次了,相信我,我已经尽了一切努力让它发挥作用。
我有一个网站,您可以通过第三方提供商(Facebook、Twitter、Google+、Microsoft)注册或登录。在注册表中有一个字段,您应该在其中输入您的生日。
这是该字段的 ViewModel (RegisterViewModel):
[Required]
[DataType(DataType.Date, ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "IncorrectDateFormat")]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime BirthDate { get; set; }
这是模型(UserViewModel):
[Required]
[DataType(DataType.Date)]
public DateTime BirthDate { get; set; }
我正在使用自动映射器将这两个映射到我的控制器中。
在视图中,我正在渲染该字段:
<div class="form-group">
@Html.LabelFor(m => m.BirthDate, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
<span class="input-icon">
@Html.TextBoxFor(m => m.BirthDate, new { @class = "form-control input-xlarge clearfix", @placeholder = @Resources.BirthDate })
@Html.ValidationMessageFor(model => model.BirthDate)
<i class="icon-calendar blue"></i>
</span>
</div>
</div>
我使用 Html.TextBoxFor 而不是 EditorFor,因为 Chrome 会自动呈现 DatePicker,而我使用的是 Jquery datepicker。
这就是我在 JS 文件中设置 DatePicker 的方式:
//All birthdate will be datepickers!
$("#BirthDate").datepicker({ altFormat: 'MM/dd/yyyy'});
我有以下问题/意见:
案例 1 - 注册本地帐户) 完美运行!在 DatePicker 文本中,我只看到格式正确的日期。
案例 2 - 登录第三方提供商) 这是我的问题,我像这样从用户那里获取 facebook 的出生日期(Facebook 返回一个日期,如 MM/dd/yyyy 但显然是一个字符串,所以我将其转换为 DateTime:
var birthdateClaim = externalIdentity.Result.Claims.Single(c => c.Type == "urn:facebook:birthday").Value;
var birthdate = DateTime.ParseExact(birthdateClaim, "MM/dd/yyyy", CultureInfo.InvariantCulture);
var registerModel = new RegisterViewModel
{
BirthDate = birthdate,
};
return registerModel;
当我登录用户时,我将他发送到一个视图,在该视图中他可以看到他的信息(从 Facebook 提取)并且他能够添加更多信息,但是日期选择器会随着时间的推移显示它!!!像这样:19/10/1978 12:00:00 a.m.(dd/MM/yyyy 时间)
我错过了什么???每当提供商发送生日时,我都不想显示时间。我该怎么办?有什么想法吗?
【问题讨论】:
标签: javascript jquery facebook date datepicker