【问题标题】:Asp.Net MVC DateTime culture issueAsp.Net MVC DateTime 文化问题
【发布时间】:2014-12-08 23:21:15
【问题描述】:

我试图在 UI 上显示月份和年份,而不是日期。如果我没有明确指定文化,这是否会成为日期的问题。如果更改服务器区域设置,这会中断吗?在这种情况下我该如何管理?编写以下代码的更好方法是什么?

[DisplayName("Delivery Month")]
public string DeliveryMonth
{
    get
    {
        return DeliveryDate.ToString("Y");
    }
    set
    {
        DeliveryDate = DateTime.Parse("1." + this.DeliveryMonth);
    }
}

public DateTime DeliveryDate { get; set; } 

【问题讨论】:

  • 你如何显示它?你可以使用@Html.TextBoxFor(m => m.DeliveryDate, "{0:MM-yyyy}"), but it wont be bound on post back. You would need to create a custom ModelBinder`。

标签: asp.net asp.net-mvc datetime culture


【解决方案1】:

在您的模型中,您可以将 DeliveryDate 设置为字符串

public string DeliveryDate { get; set; }

那么在你看来。您可以通过使用 jQuery 为您的模型添加一个文本框,该文本框将变成一个 datetimepicker 控件。

文本框的html:

<div>
    @Html.TextBoxFor(model => Model.DeliveryDate,
    new { @class = "DeliveryDatePicker", style =  "width:50%;height:25px;background:transparent;padding:0;margin-left:5px;" })
    @Html.ValidationMessageFor(model => model.DeliveryDate)
</div>

要放置在文档加载函数中的jQuery:

$("#DeliveryDate").datepicker({ dateFormat: 'dd/mm/yy' });

日期选择器的格式 - 您可以将其设置为所需的任何格式 - 在您的情况下,只需使用 dateFormat(now.getMonth() + 1) 和 dateFormat(now.getYear() - 100) 函数即可.例如在 jQuery 中将其设置为完整日期:

$("#DeliveryDate").val(dateFormat(now.getDate()) + '/' + dateFormat(now.getMonth() + 1) + '/' + dateFormat(now.getYear() - 100));

在您的数据访问/存储库获取方法中,您需要将其作为字符串获取:

deliveryModel.DeliveryDate = Convert.ToDateTime(sqlDataReader["DELIVERYDATE"]).ToString("dd/MM/yyy");

当您发布更新时,请在您的数据访问方法中将其转换为日期时间:

SqlParameter sqlParameter1 = sqlCommand.Parameters.AddWithValue("@DeliveryDate", Convert.ToDateTime(deliveryModel.DeliveryDate));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    相关资源
    最近更新 更多