2012-05-09 61 views
5

我有一個MVC動作,它的參數爲DateTime,如果我傳遞「17/07/2012」,它會引發一個異常,說param爲空,但不能有空值,但如果我通過01/07/2012它被解析爲Jan 07 2012將日期參數傳遞給MVC動作的ajax調用的安全方式

我將日期傳遞給DD/MM/YYYY格式的ajax調用,我應該依賴MM/DD/YYYY格式,儘管配置文化在web.config

這是一個簡單的方法,只有這一個日期參數。

回答

7

你有三個安全選項發送日期參數在Asp.NET-MVC:

  • 將其作爲YYYY/MM/DD它是國際日期的ISO標準。
  • 使用POST請求而不是GET請求。

  • 如果你想改變的方式默認Model Binder結合日期:

您可以更改默認的模型綁定使用IModelBinder

public class DateTimeBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
     var date = value.ConvertTo(typeof(DateTime), CultureInfo.CurrentCulture); 

     return date;  
    } 
} 

使用的用戶文化和全球.Asax寫:

ModelBinders.Binders.Add(typeof(DateTime), new DateTimeBinder()); 
ModelBinders.Binders.Add(typeof(DateTime?), new DateTimeBinder()); 

閱讀更多在this excellent blog描述了爲什麼Mvc框架團隊爲所有用戶實施默認文化。

1

gdoron的答案是正確的傳遞日期作爲querystrings。如果它們作爲表單值傳遞,但是(後值),則應使用正確的文化(假定文化是屬性配置的)。

相關問題