2012-04-14 13 views
2

私はコントローラにPOSTされる通常のフォームを持っています。日付は日/月/年形式で入力する必要があります。これは南米向けのアプリです。私は強制的に現在の文化UIをスペイン語 - ペルー語に設定しています。 MVC 3と4ベータ版で試してみました。ここで.net MVC国際日付投稿フォームからのモデルバリデーション

は、コントローラのコードは次のとおりです。私はデバッグとにModelStateエラーを見てみると、それらの内部の文化はまだ私はCurrentThread.CurrentUICultureを確認することができていても、EN-USに

[HttpPost] 
public ActionResult Create(EditPatientViewModel model) 
{ 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-PE"); 
    if (ModelState.IsValid) { 
     // never reaches in here if date submitted as day/month/year 
    } 
} 

設定されていますes-PEに設定します。

ModelState検証を変更するにはどうすればよいですか?

+0

あなたの質問が更新されたと思いますので、より詳細な解決策と回避策を追加しました。 –

答えて

4

web.configのグローバリゼーションをes-PEに設定します。

<configuration> 
    <system.web> 
     <globalization fileEncoding="utf-8" 
        requestEncoding="utf-8" 
        responseEncoding="utf-8" 
        culture="es-PE" 
        uiCulture="es-PE"/> 
    </system.web> 
</configuration> 

また、正常に送信され、検証されます。

UPDATE

次のような何かを行うことができ、あなたにModelStateは、あなたの日付が間違って解釈され、何らかの理由で場合は、次の検証が発生する前に

ModelState[n].Value.Culture = {es-PE}; 

ます。また、既定のバインダを変更し、独自のものを作ることができ

UPDATE。

public class MyDateTimeBinder : 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;  
    } 
} 

は、Global.asaxの中のApplication_Start()に

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

を入れてください。

よろしくお願いいたします。

+0

ありがとうございます、あなたは私の質問などに答えました! –

関連する問題