仅来自TextBoxFor()的日期

时间:2009-12-25 12:42:26

标签: asp.net-mvc

我无法使用TextBoxFor<,>(expression,htmlAttributes)将DateTime的唯一日期部分显示到文本框中。

该模型基于Linq2SQL,字段是SQL上和实体模型中的DateTime。

失败:

<%= Html.TextBoxFor(model => model.dtArrivalDate, String.Format("{0:dd/MM/yyyy}", Model.dtArrivalDate))%>

这个技巧似乎被折旧了,对象htmlAttribute中的任何字符串值都会被忽略。

失败:

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

我想在详细信息/编辑视图中仅存储和显示日期部分,而不是“00:00:00”部分。

21 个答案:

答案 0 :(得分:350)

MVC4 通过添加新的TextBoxFor重载来解决此问题,该重载采用字符串格式参数。你现在可以简单地这样做:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}")

还有一个带有html属性的重载,所以你可以设置CSS类,连接datepickers等等:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}", new { @class="input-large" })

答案 1 :(得分:258)

<%= Html.TextBoxFor(model => model.EndDate, new { @class = "jquery_datepicker", @Value = Model.EndDate.ToString("dd.MM.yyyy") })%>

答案 2 :(得分:229)

[DisplayName("Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime StartDate { get; set; }

然后:

<%=Html.EditorFor(m => m.StartDate) %>

答案 3 :(得分:49)

或使用无类型帮助者:

<%= Html.TextBox("StartDate", string.Format("{0:d}", Model.StartDate)) %>

答案 4 :(得分:24)

这对我有用。

@Html.TextBoxFor(m => m.DateOfBirth, "{0:MM/dd/yyyy}", new { size = "12", @class = "DOB", tabindex = 121 })

答案 5 :(得分:13)

不要害怕使用原始HTML。

<input type="text" value="<%= Html.Encode(Model.SomeDate.ToShortDateString()) %>" />

答案 6 :(得分:4)

TL; DR;

@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date")

应用[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]对我来说没有效果!


说明:

为了使用Html.TextBoxFor显示模型的日期属性:

enter image description here

您的模型类别的日期属性:

public DateTime DOB { get; set; }

在模型方面,不需要任何其他操作。


在剃刀中,您可以这样做:

@Html.TextBoxFor(m => m.DOB,"{0:yyyy-MM-dd}", new { type = "date")


说明:

类型为input的html date元素的日期必须相对于ISO8601进行格式化,即:yyyy-MM-dd

  

显示的日期是根据用户浏览器的语言环境设置的格式,   但是解析后的值始终采用yyyy-mm-dd格式。

我的经验是,该语言不是由Accept-Language标头决定的,而是由浏览器显示语言或OS系统语言决定的。

答案 7 :(得分:3)

您还可以通过应用此数据注释来使用HTML 5属性:

[DataType(DataType.Date)]

但问题是这为HTML 5浏览器启用了特定于浏览器的日期选择器。对于没有支持的浏览器,你仍然需要你自己的日期选择器,然后你必须确保你的日期选择器不会出现在浏览器之外(Modernizr可以很容易地做到这一点),或者隐藏浏览器(如果有的话)(复杂和我不知道我看到的方法有多可靠)。

最后我和Alex一起去了,因为我目前的环境没有Modernizr,但如果确实如此,我会用它来有条件地只显示我的数据选择器,如果浏览器不支持它。

答案 8 :(得分:2)

对我来说,我需要保留TextboxFor(),因为使用EditorFor()更改了输入类型。在Chrome中,它添加了一个内置的日期选择器,这搞砸了我已经使用的jQuery日期选择器。因此,要继续使用TextboxFor() AND只输出日期,您可以执行以下操作:

<tr>
    <td class="Label">@Html.LabelFor(model => model.DeliveryDate)</td>
    @{
        string deliveryDate = Model.DeliveryDate.ToShortDateString();
    }
    <td>@Html.TextBoxFor(model => model.DeliveryDate, new { @Value = deliveryDate }) *</td>
    <td style="color: red;">@Html.ValidationMessageFor(model => model.DeliveryDate)</td>
</tr>

答案 9 :(得分:1)

在初始加载时,DisplayFormat属性对我来说都不适用于任何一种形式。我创建了一个EditorTemplate:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime>" %>
<%@ Import Namespace="System.Web.Mvc.Html" %>
<%=
    Html.TextBox("", Model.ToShortDateString(), new { @class = "date-range" }) %>

答案 10 :(得分:1)

模板编辑器仅用于显示目的。 如果您使用相同的编辑器(因为它是编辑器而有意义)并且您提供了类似31/01/2010的值 - 您将收到一条错误消息,指出格式无效。

答案 11 :(得分:1)

如果您使用的是Bootstrap日期选择器,那么您只需添加 data_date_format 属性,如下所示。

./myscript.sh lines.txt > new_file.txt

答案 12 :(得分:1)

请记住,显示取决于文化。虽然在大多数情况下所有其他答案都是正确的,但它对我不起作用。如果附加了jQuery datepicker,文化问题也会导致不同的问题。

如果您希望以下列方式强制格式转义/

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

如果没有为我转义,则显示08-01-2010与预期08/01/2010

如果没有转义,jQuery datepicker将选择不同的defaultDate,在我的实例中它是May 10, 2012

答案 13 :(得分:0)

net Razor problems DateTime


Models
public class UsuarioFecha
{
       [DataType(DataType.DateTime)]
        [DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
        public DateTime? dateXXX { get; set; }
}

view

@model proyect.Models.UsuarioFecha

   @Html.TextBoxFor(m => m.dateXXX , new { Value = @Html.DisplayFor(m => m.dateXXX ), @class = "form-control", @type = "date" })

答案 14 :(得分:0)

如果您坚持使用[DisplayFormat],但没有使用MVC4,则可以使用以下方法:

@Html.TextBoxFor(m => m.EndDate, new { Value = @Html.DisplayFor(m=>m.EndDate), @class="datepicker" })

答案 15 :(得分:0)

您可以使用以下代码以 HH:mm格式打印时间,在我的情况下,属性类型为TimeSpan 因此,值以 HH:mm:tt格式进来,但我必须以上述格式显示,即。 HH:mm

  

因此您可以使用以下代码:

@Html.TextBoxFor(x =>x.mTimeFrom, null, new {@Value =Model.mTimeFrom.ToString().Substring(0,5), @class = "form-control success" })

答案 16 :(得分:0)

我使用Globalize因此使用许多日期格式,因此请使用以下内容:

@Html.TextBoxFor(m => m.DateOfBirth, "{0:d}")

这会自动将日期格式调整为浏览器的区域设置。

答案 17 :(得分:0)

在ASP.NET Core中使用标记帮助程序时,格式需要以ISO格式指定。如果没有这样指定,绑定的输入数据将无法正确显示,并显示为没有值的mm / dd / yyyy。

型号:

[Display(Name = "Hire")]
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime? HireDate { get; set; }

查看:

<input asp-for="Entity.HireDate" class="form-control" />

也可以使用asp-format属性在视图中指定格式。

生成的HTML将如下所示:

<input class="form-control" type="date" id="Entity_HireDate" 
    name="Entity.HireDate" value="2012-01-01">

答案 18 :(得分:0)

只需在模型旁边添加。

[DataType(DataType.Date)]
public string dtArrivalDate { get; set; }

答案 19 :(得分:0)

当然可以使用Html.EditorFor。 但是如果你想使用TextBoxFor并使用DisplayFormat属性中的格式,你可以这样使用它:

@Html.TextBoxFor(model => model.dtArrivalDate, ModelMetadata.FromLambdaExpression(model => model.dtArrivalDate, ViewData).EditFormatString)

或创建下一个扩展程序:

public static class HtmlExtensions
{
    public static MvcHtmlString TextBoxWithFormatFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes)
    {
        return htmlHelper.TextBoxFor(expression, ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).EditFormatString, htmlAttributes);
    }
}

答案 20 :(得分:0)

// datimetime显示在datePicker是11/24/2011 12:00:00 AM

//您可以按空格拆分并将值设置为仅日期

脚本:

    if ($("#StartDate").val() != '') {
        var arrDate = $('#StartDate').val().split(" ");
        $('#StartDate').val(arrDate[0]);
    }

标记:

    <div class="editor-field">
        @Html.LabelFor(model => model.StartDate, "Start Date")
        @Html.TextBoxFor(model => model.StartDate, new { @class = "date-picker-needed" })
    </div>

希望这会有所帮助..