gpt4 book ai didi

c# - 使用日期时间和日期选择器

转载 作者:太空宇宙 更新时间:2023-11-03 19:07:56 24 4
gpt4 key购买 nike

我想在我的 asp.net mvc web 应用程序上测试数据纠察线。

1.所以我创建了以下测试模型:-

public class TestClass
{
[DataType(DataType.Date)]
public DateTime D { get; set; }
}

2.我添加了以下脚本:-

  $(function () {
$(".datefield").datepicker();
});

3.在我看来,我有以下几点:-

@model MvcApplication6.Models.TestClass


@Html.EditorFor(item=>item.D)

现在日历可以正常显示了,但是我有这两个问题:-

1.如果在操作方法中,我将数据时间指定为今天的日期,如下所示:-

 public ActionResult Index()
{
TestClass t = new TestClass();
t.D = DateTime.Now.Date;

return View(t);
}

然后日历会切换日期和月份,所以 6 月 12 日变成 12 月 6 日,如下所示:- enter image description here

2.如果我删除等于今天的数据时间,我将得到以下默认值:-

01/01/0001

3.如果我指定日期时间允许为空,并且我没有指定任何默认值,我将得到以下异常

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

The model item passed into the dictionary is null, but this dictionary requires a non-null model item of type 'System.DateTime'.

那么有人可以就导致这三个问题的原因提出建议吗?谢谢

编辑好的,我将我的属性更改为 String 而不是 date-time ,如下所示:-

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public string CreateDate { get; set; }

但这并没有解决数据验证问题,我仍然无法输入诸如 26/06/2014 之类的日期!!所以我尝试删除 [DataType(DataType.Date)] 所以我的属性(property)变成:-

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

但以这种方式,日期选择器将不会被填充,因为日期选择器被定义为在日期类型的字段上填充,我想我遗漏了一些东西,以我对事情应该如何工作的理解?

最佳答案

主要问题是本地化。 datepicker 小部件默认采用浏览器设置的本地化,我猜它设置为“English US”,日期格式为“MM/DD/YYYY”。 The documentation指定小部件的默认日期格式为“mm/dd/yy”。请注意,jQuery DatePicker 的日期格式与 .Net Framework 使用的格式不同。更改构造函数:

$(function () {
$(".datefield").datepicker({ dateFormat: "dd/mm/yy" });
});

然而,问题将转移到 jQuery Validation 插件,它可能无法理解发生了什么。您可以通过编写自己的验证方法并覆盖默认方法,或者使用字符串而不是实际日期来解决。


编辑(处理您的编辑):
请检查这个 fidlle .我没有对它做任何特别的事情。只有一个具有特定值“13/06/2014”(2014 年 6 月 13 日)的 input 元素。当您在输入内部单击时,jQuery 日期选择器会弹出并选择正确的日期。

现在您的模型中有一个 string 属性。您不需要任何其他引用 DateTime 对象的数据注释。 Razor 将为您的属性创建一个 input 元素并在其中设置值。就是这样。您唯一需要做的就是将从数据库加载的实际 DateTime 对象转换为适当的格式:

public ActionResult DisplayMyData()
{
MyModelType model = new MyModelType();
DateTime createDateDBObject = //get the date from your database

model.CreateDate = createDateDBObject.ToString("dd/MM/yyyy");
//or, for setting the current date
//model.CreateDate = DateTime.Now.ToString("dd/MM/yyyy");

return View(model);
}

next fiddle向您展示如何将输入设置为 readonly。这意味着用户不能直接输入日期。他们必须改用 Datepicker。这反过来意味着您将始终将正确的日期格式(“dd/MM/yyyy”)返回给 Controller 。


编辑编号。 2(寻址模板)我真的很高兴您为 DateTime 创建了自己的模板。这是我一直在做的事情,解决一个比较大的问题并不费力。在我们(您)的情况下,这使事情变得更加简单。您需要做的是告诉 Razor 引擎使用您为 DateTime 对象编写的模板。为此,只需将 DataType 属性添加到表示“字符串日期”的每个属性:

[DataType("your_template_name")]
public string CreateDate { get; set; }

此外,如果您在模板中设置了@model DateTime,请更改为@model string。如果您打算使用类作为 jQuery ($(".datefield")) 的选择器,请确保您的模板在每个输入上都设置了类。

关于c# - 使用日期时间和日期选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24184073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com