我有一個MVC動作,它的參數爲DateTime
,如果我傳遞「17/07/2012」,它會引發一個異常,說param爲空,但不能有空值,但如果我通過01/07/2012
它被解析爲Jan 07 2012
。將日期參數傳遞給MVC動作的ajax調用的安全方式
我將日期傳遞給DD/MM/YYYY
格式的ajax調用,我應該依賴MM/DD/YYYY
格式,儘管配置文化在web.config
?
這是一個簡單的方法,只有這一個日期參數。
我有一個MVC動作,它的參數爲DateTime
,如果我傳遞「17/07/2012」,它會引發一個異常,說param爲空,但不能有空值,但如果我通過01/07/2012
它被解析爲Jan 07 2012
。將日期參數傳遞給MVC動作的ajax調用的安全方式
我將日期傳遞給DD/MM/YYYY
格式的ajax調用,我應該依賴MM/DD/YYYY
格式,儘管配置文化在web.config
?
這是一個簡單的方法,只有這一個日期參數。
你有三個安全選項發送日期參數在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框架團隊爲所有用戶實施默認文化。
gdoron的答案是正確的傳遞日期作爲querystrings。如果它們作爲表單值傳遞,但是(後值),則應使用正確的文化(假定文化是屬性配置的)。