2012-12-05 36 views
9

我安装了ASP.NET MVC3。我需要带格式日期的日期选择器。我想这一点,但它不工作(路过的时候“{0:DD/MM/YYYY}”为格式的参数,它仍然不格式):如何格式化MVC3中由TextBoxFor()显示的DateTime?

private static MvcHtmlString FormattedDateTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string format, RouteValueDictionary htmlAttributes) 
    { 
     var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 

     if (metadata.Model != null && metadata.Model as DateTime? != null) 
      htmlAttributes.Add("value", string.Format(format, (DateTime)metadata.Model)); 

     return htmlHelper.TextBoxFor(expression, htmlAttributes); 
    } 

编辑:我的代码工作,如果格式为“{ 0:dd-MM-yyyy}“,但不仅是”{0:dd/MM/yyyy}“

我知道MVC4已经具备了这个功能,但不幸的是我的项目是写在MVC3上的。你可以帮我吗?

+1

可能重复的[DateFormat from TextBoxFor()](http://stackoverflow.com/questions/1961114/date-only-from-textboxfor) – KyleMit

回答

1

在模型中,使用以下命令:

[DisplayFormat(DataFormatString="{0:dd/MM/yyyy}")] 
public DateTime YourDate { get; set; } 

下面是它应该在视图(View):

@Html.EditorFor(model => model.YourDate, new { @class = "date" }) 

这应该给你格式化出来的dd格式的日期/ MM/YYYY。

+0

也许你的意思是[[DisplayFormat(DataFormatString =“{0: DD/MM/YYYY}“)]'? –

+0

是的,我的坏。对于那个很抱歉。直接从我的代码复制,并没有注意到你有不同的格式。对于那个很抱歉。这工作顺便吗? – IyaTaisho

+0

您是否知道EditorFor没有htmlAttribues参数! –

35

我甚至已经得到工作的唯一格式是这样的:

@Html.TextBoxFor(m => m.Birthdate, "{0:MM/dd/yyyy}") 
+2

不要忘记,这将只适用于MVC4或更高版本。 –

+1

** FYI **:[许多浏览器](https://weblog.west-wind.com/posts/2012/nov/08/html5-input-typedate-formatting-issues)和['input [type = date]'spec](https://www.w3.org/TR/html-markup/input.date.html)需要'“{0:yyyy-MM-dd}”'格式。 – KyleMit

6

的语法是: @ Html.TextBoxFor(表达式,字符串格式,对象htmlAttributes)

例如:

@Html.TextBoxFor(x => x.DateUtc, "{0:yyyy-MM-dd HH:mm:ss}", 
      new { @class = "form-control", placeholder = "Enter Title", id="myDate"}) 
2

这种格式对您有帮助:

@Html.TextBoxFor(Model => Model._facadeLowdown.DoB, new { @value= Model._facadeLowdown.DoB.HasValue ? Model._facadeLowdown.DoB.Value.ToString("MM/dd/yyyy") : "" 
} 
0

显示将取决于文化。尽管在大多数情况下,所有其他答案都是正确的,但这对我并不适用。如果连接,文化问题也会导致jQuery datepicker出现不同的问题。

如果要强制格式逃生/以下方式:

@Html.TextBoxFor(model => model.YourDate, "{0:MM\\/dd\\/yyyy}") 

如果没有逃脱对我来说这表明08-01-2010与预期08/01/2010

此外,如果没有逃脱jQuery datepicker将选择不同的defaultDate,在我的例子中它是May 10, 2012

相关问题