ChatGPT解决这个技术问题 Extra ChatGPT

仅来自 TextBoxFor() 的日期

我无法使用 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”部分。


R
Ross McNab

MVC4 通过添加一个新的 TextBoxFor 重载解决了这个问题,该重载采用字符串格式参数。您现在可以简单地执行此操作:

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

还有一个采用 html 属性的重载,因此您可以设置 CSS 类、连接日期选择器等:

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

这是 MVC4 的最佳答案 - 它允许我使用 jquery UI datepicker 并对选择进行格式化:@Html.TextBoxFor(m => m.SomeDate, "{0:MM/dd/yyyy}", new { @id="datepicker" })
谢谢!但是 TextBoxFor 忽略模型的 [DisplayFormat] 属性似乎是一个错误。很高兴 TextBoxFor 中至少有一个覆盖(并且您提醒了我)。
我将其设置为 @Html.TextBoxFor(model => model.CDate, "{0:dd.MM.yyyy}"),但在 httpPost 上我得到的数据类似于 MM.dd.yyyy。如何解决这个问题?
我请你喝啤酒!这个小问题让我很头疼,直到我找到了这个答案。
仅供参考Many browsersinput[type=date] spec 需要 "{0:yyyy-MM-dd}" 格式。
A
Alexeyss
<%= Html.TextBoxFor(model => model.EndDate, new { @class = "jquery_datepicker", @Value = Model.EndDate.ToString("dd.MM.yyyy") })%>

EditorFor 解决方案有效,除非您需要覆盖其他 HTML 属性,如 id 或类。这是一个很好的解决方案。奇怪的是 V 需要大写。
为了安全地处理 null,您可以执行 Model.EndDate.GetValueOrDefault().ToString("dd.MM.yyyy")。如果 Model.EndDate 为空,将显示 Datetime 的默认值。
关于空值,DateTime 的默认值为 1901 年 1 月 1 日,在我看来,最好使用 @Value = (Model.DateBecamePermanentResident == null ? "" : Model.DateBecamePermanentResident.Value.ToString("dd.MM.yyyy"))
@Spikolynn,这并没有为我生成第二个“值”属性(MVC3/razor 模板)。
重要提示:检查“Value”中的大写“V”,小写字母不行!
k
kim3er
[DisplayName("Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime StartDate { get; set; }

然后:

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

是的,因为现在有 EditorFor 助手并且 MVC2 已完成,您的解决方案就是要走的路
但是现在 Jquery UI datepicker 不能应用于这个输入,因为它忽略了我的 @class="datepicker" 属性,正如 Html.EditorFor() 帮助器所指定的那样。因此,此文本框现在格式正确,但单击时不会启动日期选择器。所以它修复了一件事,打破了另一件事。
我怎样才能让它按照这个解决方案显示,但也让它像使用 Html.TextboxFor() 一样启动日期选择器
我正在使用 MVC4 Razor 语法,日期字段呈现为 @Html.EditorFor(m => m.IssueDate),模型上的格式应用为 [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}" )],但日期仍显示为 01/01/0001 12:00:00 AM
@Aaron 没有具有 htmlAttributes 参数的 EditorFor 重载。您可能将它传递给 viewTemplate 参数或其他东西,以为您正在传递 htmlAttributes。这是Editorfor的缺点。 TextBoxFor 忽略 DisplayFormat 注释。 Alexeyss 的解决方案以不同的方式应用格式来解决此问题。
a
andersjanmyr

或者使用无类型的助手:

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

略有变化@Html.TextBoxFor(model => model.EndDate, "{0:d}", new { type = "date" })
它确实使用 Razor 而不是 ASPX 视图引擎,但它们都在 MVC 4 中工作,并且从一种语法更改为另一种语法是微不足道的。我在 Razor 上发帖,因为这就是我使用和测试过的。就像我说的,这是一种变体。
@Dan Friedman:这就是我要走的路!我曾经使用编辑器模板,但后来我还必须创建自己的 html 并包含所有验证消息和所有 Bootstrap 属性,所以这对我来说确实是要走的路(asp.net mvc5)
您能否创建一个新问题并详细说明您所做的工作。标记我,我很乐意提供帮助。
当您需要全球化时,此解决方案是最佳选择。
T
Tasos K.

这对我有用。

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

L
Legends

TL;博士;

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

申请 [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")] 对我没有用!

解释:

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

显示的日期是根据用户浏览器的区域设置格式的,但解析的值总是格式为 yyyy-mm-dd。

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

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

https://i.stack.imgur.com/m2HPP.png

您的模型类的日期属性:

public DateTime DOB { get; set; }

模型方面不需要其他任何东西。

在 Razor 中,您可以:

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

小东西,最后少了花括号
T
Tamas Czinege

不要害怕使用原始 HTML。

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

那时候他怎么发呢?因为日期几乎肯定不会在服务器上被解析回来。
只要您包含正确的 'name="StartDate"',模型绑定器就会将其拾取。
@DrJokepu 是 MVC3 上唯一为我工作的人。那就是我无论如何都没有制作 TextBoxForEditorFor 格式值。请参阅我的问题:TextBoxFor helper mixes day and month in dates
T
Tasos K.

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

[DataType(DataType.Date)]

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

最后我选择了 Alex 的,因为我当前的环境没有 Modernizr,但如果有,我会使用它来有条件地仅在浏览器不支持时显示我的数据选择器。


T
Tasos K.

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

<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>

L
Liam

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

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

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


C
CrnaStena

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

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

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

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

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


t
triskelion

在初始加载时,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" }) %>

g
guerven

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


S
Sneha

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

      @Html.TextBoxFor(m => m.StartDate, new { 
@id = "your-id", @class = "datepicker form-control input-datepicker", placeholder = "dd/mm/yyyy", data_date_format = "dd/mm/yyyy" 
})

c
coymax

// 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>

希望这有帮助..


您的解决方案应该有效。但以我的拙见,依赖客户端在服务器端发布的格式化字符串日期可能是危险的。如果服务器端的区域设置不包含日期和时间之间的空格,则公开的解决方案将失败。
Y
Yury Dzhantuganov

当然你可以使用 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);
    }
}

a
arturas

只需在您的模型旁边添加。

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

M
Michael Emerick

在 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">

S
Sheriff

您可以使用下面的代码以 HH:mm 格式打印时间,在我的情况下,属性类型是 TimeSpan 所以该值以 HH:mm:tt 格式出现,但我必须以上述格式显示,即。高:毫米

所以你可以使用这个代码:

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

E
Elijan9

如果你坚持使用 [DisplayFormat],但你没有使用 MVC4,你可以使用这个:

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

D
Dr. Mantis Tobbogan
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" })

请为您的代码添加一些解释。 SO不鼓励仅使用代码的答案。

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅