基本上,我的datepicker使用英国格式的dd/mm/yyyy 但是当我提交表单时,ASP.net显然使用美国格式。 (只接受少于12天,即认为是月份。)

 public ActionResult TimeTable(DateTime ViewDate)

有没有办法强迫它识别某种方式?

奇怪的是,其他插入方法似乎都能识别正确的格式。

“参数字典包含参数提供一个空条目ViewDate非空类型System.DateTime为方法System.Web.Mvc.ActionResult Index(System.DateTime)Mysite.Controllers.RoomBookingsController 。一个可选参数必须是引用类型,可以为空的类型,或者声明为可选参数。“

===============>>#1 票数:16 已采纳

有读这个 它可以很好地解释发生了什么以及它为什么会起作用。

我知道每个使用该网站的人都在英国,所以我可以安全地覆盖默认的DateTime模型绑定器:

public class DateTimeModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var date = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).AttemptedValue;

        if (String.IsNullOrEmpty(date))
            return null;

        bindingContext.ModelState.SetModelValue(bindingContext.ModelName, bindingContext.ValueProvider.GetValue(bindingContext.ModelName));
        try
        {
            return DateTime.Parse(date);
        }
        catch (Exception)
        {
            bindingContext.ModelState.AddModelError(bindingContext.ModelName, String.Format("\"{0}\" is invalid.", bindingContext.ModelName));
            return null;
        }
    }
}

===============>>#2 票数:3

您需要为DateTime使用自定义ModelBinder。 我和你有同样的问题。

===============>>#3 票数:2

您是否尝试将当前文化设置为en-GB?

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
     base.Initialize(requestContext);

     CultureInfo cultureInfo = CultureInfo.GetCultureInfo("en-GB");

     Thread.CurrentThread.CurrentCulture = cultureInfo;
     Thread.CurrentThread.CurrentUICulture = cultureInfo;                    
 }

===============>>#4 票数:2

基本上,我的datepicker使用英国格式的dd / mm / yyyy

初学者的错误。 它应该使用浏览器设置的任何格式。 问题不是格式,而是客户端和服务器之间的格式不同。 服务器应该根据协商的区域设置发出格式化日期的代码,然后服务器也会使用它来解析它。

但是当我提交表单时,ASP.NET显然使用美国格式。

不。 这就是说,当我服用香料时,它总是盐,然后你总是加盐。 您的服务器接受当前协商的文化 - 除非您修改设置 - 在客户端和服务器之间协商。 检查线程当前文化何时应该进行解析以查看它的设置。

===============>>#5 票数:2

你能行的:

  • 全局(在Application_Start()下的global.asax中):

     ModelBinders.Binders.Add(typeof(DateTime), new DateTimeModelBinder()); 
  • 方法:

      public ActionResult TimeTable([Binder(typeof(DateTimeModelBinder)]DateTime ViewDate) 
  • 对于自定义模型类 - 啊不,没有可能性导致您使用struct DateTime ;-)

啊,对不起我无法在Adams帖子上添加评论 - 这是基于他的代码。

===============>>#6 票数:0

从我的BindigTools绑定DateTime? (Nullable),基于一些书籍样本 - Pro MVC3

    public static DateTime? GetValueNDateTime(ModelBindingContext context, string searchPrefix, string key, string format)
    {
        ValueProviderResult vpr = context.ValueProvider.GetValue(searchPrefix + key);
        DateTime outVal;
        if (DateTime.TryParseExact(vpr.AttemptedValue, format, null, System.Globalization.DateTimeStyles.None, out outVal))
        {
            return outVal;
        }
        else
        {
            return null;
        }
    }

它使用精确解析,因此您不应该对解析日期有任何问题。

  ask by Doomsknight translate from so

未解决问题?本站智能推荐:

1回复

如何在Asp.net MVC3中的视图中以dd / MM / yyyy格式显示日期

控制器代码 我在用户登录后传递否 ,并希望显示我已成功完成的登录人员的记录。我的问题再次出现在日期。当显示登录用户的记录时,出生日期是与时间一起显示。就像这个2/19/2001 12:00:00 AM ,相反,我只想要日期部分,而不是像19/2/2001这样的时间 。 为实现这一点,我
1回复

ASP.NET MVC3将REST服务路由到控制器

我想以下列方式路由REST服务URL: 所以基本上我在网址中为Rest做了一个硬编码的例外。 我对MVC路由不是很熟悉。 那么实现这一目标的好方法是什么?
2回复

ASP.NET MVC3:来自控制器中Null的DropdownList的对象

我为BookShop创建了一个示例MVC3应用程序。 我有一个创建动作。 在“创建动作”用户中,输入书名,作者名并选择类型名称。 它没有错误地工作。 但是在控制器中,我没有获得所选的流派名称(-流派对象为null)。 我们如何纠正它? 注意:当我编写@Html.DropDownL
2回复

将CSS类从控制器传递到ASP.NET MVC3中的局部视图

我有一个来自控制器的简单代码 该页面APage的一部分是: 在javascript中,我要生成具有不同类名(css类名)的APage 如何将控制器函数(如果我要声明: public ActionResult CreatePage(string cssClass) { ..
2回复

ASP.NET MVC3:日期时间格式仍然是视图上的问题

Ive已成功覆盖Dateformat以在控制器上使用UK格式。 因此,发布似乎可以在正确的日期进行。 但是在我看来,我已经做到了以上几点,并且增加一天就增加了月份! 也就是,只要以相同的日期调用动作链接,就会导致它不断地反转。 无论如何,是否也将此英国日期格式应用于视图
1回复

ASP.NET MVC3格式化DateTime

嗨,我是MVC3的新手,如果遇到一个小问题,我似乎无法解决。 我在一个表格中有一个值,该值代表一个国家的法定假日。 因此它只包含一天零一个月。 现在,我无法找到一种方法来设置我的实体验证,因为它只接受日/月组合。 我尝试使用 但是,这只会正确显示日期,并且总是使月份为“
3回复

C#asp.net MVC3中的日历控制

嗨,大家好,我在MVC3 asp.net C#中寻找使用日历控件的最简单方法。 我玩过MVC3 C#,无法使压光机控件正常工作,我试图手写代码,但失败了。 我试图找到一些ASP.net示例未成功。 我要使用日历的方式是,当用户单击某个日期时,他或她便可以输入信息并将其存储在数据库中。 这
2回复

使用CCW的ASP.NET MVC3 AntiForgery令牌

我有一些遗留应用程序,目前正在向MVC3表单发布基本信息。 我想将其分离为GET并传递查询字符串中的值。 很容易。 但是,我想在请求中添加一个防伪标记。 首先,这看起来是一个不错的选择吗? 其次,是否有从非MVC3模块到MVC3表单实现此类功能的任何示例? 我的另一种选择是加密查
2回复

从同一控制器ASP.NET MVC3重定向以查看或调用void方法

我有一个控制器,应该返回一个视图或运行同一控制器中包含的void方法,这可能吗? 如果是这样,控制器应该是哪种类型?
1回复

如何在自定义属性中将路由重定向到ASP.NET MVC3控制器之外?

我想知道如何从控制器外部重定向到特定路由。 我有一个需要重定向路由的自定义属性。