2014-02-11 56 views
1

我知道这已被问了很多次,并相信我,我尝试了一切,使其工作。删除时间部分出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供应商发送出生日期。我该怎么办?有任何想法吗?

回答

0

DateTime即使没有提供时间也会增加时间(如DateTIME的名称所示)。您必须使用toString格式化日期。

var birthdate = DateTime.ParseExact(birthdateClaim, "MM/dd/yyyy", CultureInfo.InvariantCulture).toString('MM/dd/yyyy'); 
+0

正如您所见,birthdate变量是DateTime类型,因此我无法将ToString()应用于DateTime.ParseExact。 – MRFerocius

+0

嗯,是的。你能稍后格式化吗?或者只是使用一个字符串来存储它? –

+0

不,我不能。之后,ViewModel被渲染。 – MRFerocius