【问题标题】:ModelState.IsValid is always false because of datetime.now由于 datetime.now,ModelState.IsValid 始终为 false
【发布时间】:2015-04-25 14:31:50
【问题描述】:

我有一个 ASP.NET MVC 应用程序,在编辑和创建操作中,我通过datetime.now 设置了我的班级的日期字段。一切正常,我可以添加和编辑记录。但是当我想删除这些记录时,ModelStata.IsValid 总是false 并且错误是"The value '4/25/2015 9:34:39 AM' is not valid for register time." 注册时间是我的字段的显示名称。

这是我的操作代码:

public ActionResult Create([DataSourceRequest]DataSourceRequest request, InvtGroups invtGroup)
{
    if (invtGroup != null && ModelState.IsValid)
    {
        invtGroup.DDate = DateTime.Now;
        repo.Insert(invtGroup);
    }
    return Json(new[] { invtGroup }.ToDataSourceResult(request, ModelState));
}
[HttpPost]
public ActionResult Delete([DataSourceRequest]DataSourceRequest request, InvtGroups invtGroup)
{
    if (invtGroup != null && ModelState.IsValid)
        repo.Delete(invtGroup);
    return Json(new[] { invtGroup }.ToDataSourceResult(request, ModelState));
}

这是我的模型(我首先使用实体​​框架代码):

public class InvtGroups : User
{
    [Key]
    [Column(TypeName = "VARCHAR"), StringLength(21)]
    public string CGroupCode { get; set; }

    [Column(TypeName = "VARCHAR"), StringLength(50)]
    public string CGroupName { get; set; }

    [Column(TypeName = "BIGINT")]
    public Int64? LiCode1 { get; set; }

    [Column(TypeName = "BIGINT")]
    public Int64? LiCode2 { get; set; }

    [Column(TypeName = "BIGINT")]
    public Int64? LiCode3 { get; set; }

    [Column(TypeName = "BIGINT")]
    public Int64? LiCode4 { get; set; }

    [Column(TypeName = "BIGINT")]
    public Int64? LiCode5 { get; set; }
}

还有用户类:

public class User
{
    [Column(TypeName = "VARCHAR"), StringLength(20)]
    public string CUserNo { get; set; }

    [Column(TypeName = "DATETIME")]
    public DateTime? DDate { get; set; }
}

【问题讨论】:

  • 顺便说一句,这是字段:public DateTime? DDate { get; set; }
  • 您是否为属性指定了 DataType.DateTime 属性?
  • 同时显示型号代码
  • 我将它们添加到问题中。
  • 试试看这里:stackoverflow.com/questions/11185847/…我不确定当然是同一个问题

标签: c# asp.net-mvc datetime kendo-grid


【解决方案1】:

您可以执行以下操作:

1- _Layout.cshtml

 <script>
        kendo.culture("en-GB");
        var culture = kendo.culture();
        culture.calendar.patterns.d = "dd MMM yyyy"; // 25 Feb 2015
        culture.calendar.patterns.D = "dd MMM yyyy";
        culture.calendar.patterns.t = "HH:mm";   // 16:45
        culture.calendar.patterns.T = "HH:mm";
        culture.calendar.patterns.g = "dd MMM yyyy HH:mm";
        culture.calendar.patterns.G = "dd MMM yyyy HH:mm";
 </script>

2- Global.asax

   protected void Application_BeginRequest(object sender, EventArgs e)
        {

            CultureInfo info = new CultureInfo("en-GB");
            info.DateTimeFormat.ShortDatePattern = "dd MMM yyyy";
            info.DateTimeFormat.LongDatePattern = "dd MMM yyyy HH:mm";
            info.NumberFormat.CurrencyDecimalDigits = 2;
            info.NumberFormat.CurrencyGroupSeparator = ",";
            info.NumberFormat.NumberDecimalDigits = 2;
            Thread.CurrentThread.CurrentCulture = info;
            Thread.CurrentThread.CurrentUICulture = info;
        }

上面的代码将为您的整个应用程序设置日期格式和数字格式

3- 您可以阅读此文章以获取有关如何添加 culture js files 的更多信息

希望对您有所帮助,如果您仍有任何疑问,请继续。

【讨论】:

  • 谢谢哈迪,我已经在我的_layout 中添加了 kendo.culture.* 文件。我还需要这样做吗?
  • 参考第 3 点中的链接,您可以阅读以下内容:“如果您检查每种文化的脚本的源代码,您会注意到每个脚本只是将文化信息对象添加到kendo.cultures 映射。您可以轻松定义自己的文化文件并扩展当前的 kendo.cultures 映射。唯一的要求是遵循上面列出的默认文化信息的结构。"
  • 是的,我知道。但是当我包含了我需要的文化文件后,我就不必添加上面的代码了,是吗?
  • 您在日期格式中仍然遇到同样的错误吗? 2015 年 4 月 25 日是无效日期,因为您的申请等待 25/4/2015 代替?如果是,那么您需要强制告诉您的应用程序使用您想要的格式,否则您可以放弃该解决方案,但它可能会帮助其他人遇到同样的问题并且他们想要自定义日期格式。
  • 我正在使用DateTime.Now,所以应用程序本身给了我日期,它应该没有任何问题。感谢您的时间和 cmets Hadi。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多