我知道这已被问了很多次,并相信我,我尝试了一切,使其工作。删除时间部分出Jquery UI DatePicker
我有一个网站,让你注册或使用第三方提供商(Facebook,Twitter,Google +,微软)登录在注册表单中有一个你应该放置生日的地方。
这是该字段的视图模型(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; }
我使用automapper映射在我的控制器这两个。
在视图中我渲染场这样的:
<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文件:
//All birthdate will be datepickers!
$("#BirthDate").datepicker({ altFormat: 'MM/dd/yyyy'});
我有以下问题/意见:
案例1 - 注册本地帐户) 运行完美!在DatePicker文本上,我只能以正确的格式看到日期。 (Facebook)返回一个像MM/dd/yyyy这样的日期,但显然是一个字符串,所以我将其转换为日期时间:
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 am(dd/MM/yyyy时间)
我错过了什么???我不想显示时间whene供应商发送出生日期。我该怎么办?有任何想法吗?
正如您所见,birthdate变量是DateTime类型,因此我无法将ToString()应用于DateTime.ParseExact。 – MRFerocius
嗯,是的。你能稍后格式化吗?或者只是使用一个字符串来存储它? –
不,我不能。之后,ViewModel被渲染。 – MRFerocius