【问题标题】:jQuery set date value in asp net core 2 razorjQuery在asp net core 2 razor中设置日期值
【发布时间】:2018-06-19 23:41:36
【问题描述】:

我在我的 asp net core razor 表单中遇到了 jQuery 的问题。我可以使用 jQuery 在文本等输入类型中更改值,但不能更改日期类型,我不知道为什么。

这里是项目模型的一部分,只是属性,我想改变它的形式:

[DataType(DataType.Date)]
public DateTime? OnSite { get; set; }

[Display(Name = "Opening date")]
[DataType(DataType.Date)]
public DateTime? OpeningDate { get; set; }

这是 Razor 表单的部分:

<div class="form-group">
   <label asp-for="Project.OnSite" class="control-label"></label>
   <input asp-for="Project.OnSite" class="form-control" style="width: 170px"/>
   <span asp-validation-for="Project.OnSite" class="text-danger"></span>
</div>

这是我的 jQuery 脚本:

$(@Html.IdFor(x => x.Project.OpeningDate)).change(function () {
            var openingDate = $(@Html.IdFor(x => x.Project.OpeningDate)).val();
            var monday = moment(openingDate).day("Monday").format("MM/DD/YYYY HH:mm:ss");
            //alert(monday);

            $((@Html.NameFor(x => x.Project.OnSite))).val(monday);

});

这是生成表单的样子(源页面视图):

<div class="form-group">
   <label class="control-label" for="Project_OnSite">OnSite</label>
   <input class="form-control" style="width: 170px" value="" type="date" id="Project_OnSite" name="Project.OnSite" />
    <span class="text-danger field-validation-valid" data-valmsg-for="Project.OnSite" data-valmsg-replace="true"></span>
</div>

正如我所说,我可以将星期一的值放入 textare、文本框,但我不能输入 =“date”,可能是因为 razor 在后台使用了一些 datetimepicker,这不会让我更改,或者我不知道。 浏览器中生成的表单如下所示: Opening date

这只是我想要更改的输入(到本周的星期一): OnSite date

解决

输入类型=日期中的日期基于系统的日期时间 - 因此服务器或您的本地计算机。但是事件我将我的 Windows 10 的本地日期时间更改为 "dd.MM.yyyy",datetimepicker 不接受来自 jquery 脚本的这个值。我已将输入日期的值格式化为此 "YYYY-MM-DD"

这是一个有效的简单示例:

型号:

[DataType(DataType.Date)]
public DateTime? OnSite { get; set; }

查看:

<div class="form-group">
     <label asp-for="Project.OnSite" class="control-label"></label>
     <input asp-for="Project.OnSite" class="form-control" />
     <span asp-validation-for="Project.OnSite" class="text-danger"></span>
</div>

JQuery:

var dateFormat = "YYYY-MM-DD";
var openingDate = $(@Html.IdFor(x => x.Project.OpeningDate)).val();
var monday1 = moment(openingDate).day("Monday").day(-6).format(dateFormat);
$(@Html.IdFor(x => x.Project.OnSite)).val(monday1);

【问题讨论】:

  • 当浏览器尝试操纵该字段时,我在使用 input type="date" 时遇到了不好的体验。尝试将其更改为 type="text" 看看是否能解决您的问题。
  • 是的,这是可能的方式,但我更好奇为什么它不起作用以及如何使它起作用。

标签: jquery razor asp.net-core


【解决方案1】:
[Display(Name = "Monday")]
[DataType(DataType.Date)]
public DateTime? MondayOfCurrentWeek
    {
        get
        {
            DateTime today = DateTime.Today;
            int currentDayOfWeek = (int)today.DayOfWeek;
            DateTime sunday = today.AddDays(-currentDayOfWeek);
            DateTime monday = sunday.AddDays(1);
            return monday;
        };
        set;
    }

这可能是后端的一个小解决方法。在名为“today”的变量中,您可以输入每一天,例如“OpeningDate”,它应该返回您想要的实际一周的星期一的日期,当您获得 x.Project.MondayOfCurrentWeek 时,您将收到星期一的日期。如果有用,请发送一些反馈。

【讨论】:

  • 你为什么在那里使用 .day(-6)?
  • 因为我想要上周的星期一。
猜你喜欢
  • 1970-01-01
  • 2021-07-04
  • 2018-12-04
  • 2020-12-21
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 2019-12-20
相关资源
最近更新 更多