2011-04-12 66 views
1

我傳遞的日期到我的服務器不變文化,格式如下MVC 1參數綁定

'mm/dd/yy' 

參數在MVC綁定失敗來解析這個日期和參數返回null。這很有可能是因爲IIS運行在使用英語文化的機器上('dd/mm/yy'工作正常)。

我想重寫所有日期的解析我的服務器使用固定區域性像等等......

Convert.ChangeType('12/31/11', typeof(DateTime), CultureInfo.InvariantCulture); 

即使日期是另一個對象的一部分......

public class MyObj 
{ 
    public DateTime Date { get; set; } 
} 

我的控制器方法是這樣的....

public ActionResult DoSomethingImportant(MyObj obj) 
{ 
    // use the really important date here 
    DoSomethingWithTheDate(obj.Date); 
} 

日期被髮送爲Json數據所以....

myobj.Date = '12/31/11' 

我試過在Global.asax

binderDictionary.Add(typeof(DateTime), new DateTimeModelBinder()); 

這不起作用增加IModelBinder到binderDictionary的實現,而且也不

ModelBinders.Binders.Add(typeof(DateTime), new DataTimeModelBinder()); 

這似乎是一些人會想要一直做的。我看不出爲什麼要在服務器上的當前文化中解析日期等。客戶端將不得不找出服務器的文化,只是爲了格式化日期服務器將能夠解析.....

任何幫助表示讚賞!

回答

2

我在這裏已經解決了這個問題,我已經錯過了,在對象,日期時間是可空

public class MyObj 
{ 
    public DateTime? Date { get; set; } 
} 

因此我粘結劑WASN不被接受。

如果有人有興趣,這是我做過什麼....

  1. 在全球。ASAX增加了以下

    binderDictionary.add(typeof(DateTime?), new InvariantBinder<DateTime>()); 
    
  2. 創建一個不變的粘合劑,像這樣

    public class InvariantBinder<T> : IModelBinder 
    { 
        public object BindModel(ControllerContext context, ModelBindingContext binding) 
        { 
         string name = binding.ModelName; 
    
         IDictionary<string, ValueProviderResult> values = binding.ValueProvider; 
    
         if (!values.ContainsKey(name) || string.IsNullOrEmpty(values[names].AttemptedValue) 
          return null; 
    
         return (T)Convert.ChangeType(values[name].AttemptedValue, typeof(T), CultureInfo.Invariant); 
        } 
    } 
    

希望這會派上用場別人.....

0

是否可以通過ISO 8601格式將日期傳遞給服務器?我認爲服務器會正​​確解析,無論其區域設置如何。

1

是您的問題,您的自定義模型聯編程序無法解析某些輸入日期或您的自定義模型聯編程序永遠不會被調用?如果是前者,那麼試圖使用用戶瀏覽器的文化可能會有所幫助。

public class UserCultureDateTimeModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     object value = controllerContext.HttpContext.Request[bindingContext.ModelName]; 
     if (value == null) 
      return null; 

     // Request.UserLanguages could have multiple values or even no value. 
     string culture = controllerContext.HttpContext.Request.UserLanguages.FirstOrDefault(); 
     return Convert.ChangeType(value, typeof(DateTime), CultureInfo.GetCultureInfo(culture)); 
    } 
} 

...

ModelBinders.Binders.Add(typeof(DateTime?), new UserCultureDateTimeModelBinder()); 
+0

的問題是,我的自定義模型綁定器永遠不會被調用 – Gaz 2011-04-13 08:00:23