簡體   English   中英

在HTTP GET中綁定en-GB日期

[英]Binding en-GB dates in a HTTP GET

我和Dates度過了一段噩夢。 我們的總部設在英國,因此我們的日期格式為dd / MM / yyyy。 這是用戶在需要特定日期時將在表單中鍵入的內容。 我有一個表格只接受這樣的財產。 它顯然是一個DateTime類型。 我想在GET中將此表單發送到控制器,因此用戶有一個很好的URL,他們可以保存傳遞,等等。視圖還需要將JQuery UI datepicker綁定到此元素。 我還需要表單元素具有一定的id和類,所以我真的需要將其呈現給表單:

@Html.TextBoxFor(model => model.ReturnDate, new { Class = "date", id = "ReturnDate" })

我在web.config中指定了一個英國文化變體:

<globalization uiCulture="en" culture="en-GB"/>

然而,正如這里所解釋的那樣( http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx ),當獲得MVC忽略文化變體的控制器啟動時默認為美國(顯然沒有人存在於美國以外,所以這對微軟來說沒問題,咆哮)附件無濟於事,因為這意味着我必須為每個模型中的每個日期設置它

這意味着如果用戶輸入01/05/2012,我最終會遇到05/01/2012,這是錯誤的!

我已經看過這個問題的各種解決方案,但沒有一個真正符合我的需要。 我需要一種方法,以便通過GET發送的所有日期都是英國格式 我們完全位於英國,因此不會輸入任何英國格式。

我真的不想創建和編輯,除非它是一種我可以在沒有附加到此編輯器的View / Viewmodel的情況下執行此操作的方法,因為在我們有日期選擇器的任何地方使用它都會非常笨拙。

所有的幫助將非常感謝!

得到一個解決方案,感謝@Jon的指針:

public class GBDateModelBinder : IModelBinder
{

    #region IModelBinder Members

    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        string dateString = controllerContext.HttpContext.Request.QueryString[bindingContext.ModelName];
        if (string.IsNullOrEmpty(dateString))
                 dateString = controllerContext.HttpContext.Request.Form[bindingContext.ModelName];
        DateTime dt = new DateTime();
        bool success = DateTime.TryParse(dateString, CultureInfo.GetCultureInfo("en-GB"), DateTimeStyles.None, out dt);
        if (success)
        {
            return dt;
        }
        else
            {
            return null;
        }
    }

    #endregion
}

然后在global.asax中注冊:

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

UPDATE

修改此項以在POST時允許相同的問題!

除了利亞姆的回答:

對於那些仍然遇到此問題(!)並且正在嘗試綁定到Nullable DateTime的人,請確保在global.asax中注冊了正確的類型:

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

讓我難過了15分鍾!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM