我有一個控制器POST操作,使用RedirectToAction重定向到GET方法。RedirectToAction正在交換日期和月份
return RedirectToAction(SomeActionName, new { date = someModel.someUTCDate });
我已經實現了其解析使用假定文化和時區信息日期自定義模型粘結劑,所以我正確地攔截此。在我的問題的基本步驟:
- POST操作被調用的日期/時間字符串,這是GMT標準時間如果沒有指定,否則
- 定製模型綁定解析此日期爲DateTime帶着一種UTC,這是在正確的格式正確綁定到模型
- POST操作重定向使用RedirectToAction與被綁定爲UTC時間上的模型現在
- MVC3試圖綁定一個DateTime字符串值的日期爲GET月和日交換
在調用RedirectToAction和重新綁定GET操作的DateTime值之間的某處,正在發生字符串轉換,這似乎是交換月份和周圍的日子。
是否有一種簡單的方法來確保正確的字符串轉換髮生,而無需爲每個RedirectToAction調用手動轉換它?我真的很想知道這個路由值到字符串轉換的地方,以及我是否可以影響它進行正確的字符串轉換。
爲了說明我有什麼好一點,我有一個自定義DateTime模型綁定
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (value == null || string.IsNullOrEmpty(value.AttemptedValue) || value.AttemptedValue == "null")
{
return null;
}
return FormatHelper.ConvertStringFromGMT(value.AttemptedValue);
}
在重定向我發現,該模型粘結劑的value.AttemptedValue是不正確的格式化字符串。
你的意思是說,SomeActionName有一個日期作爲參數,該日期未正確綁定? – 2012-02-24 11:34:38
我的意思是SomeActionName有一個日期作爲參數,並且我的自定義模型聯編程序正在接收不正確格式化的字符串以綁定此值。我爲date參數指定了一個DateTime值,並將其轉換爲MVC中字符串值,該值不正確地格式化。 – 2012-02-24 11:47:11
我認爲轉換是在綁定到動作參數之前在ModelBinder中完成的。 DefaultModelBinder類使用不同的區域性設置來執行來自請求數據的不同 區域的類型轉換。從URL(路由和查詢字符串數據)獲得的值使用文化不敏感解析轉換爲 ,但從表單數據中獲得的值則將文化轉換爲 帳戶。 – 2012-02-24 11:56:32