2011-07-22 8 views
0

私の登録フォームでは、ユーザに生年月日を設定する必要があります。それは、その日のSELECT、その月のSELECT、そしてその年のSELECTを表示するという要件です。ビューモデル内の単一のプロパティでPOSTパラメータをマージする

私は、そのスキーマを作成するHtmlヘルパー拡張を作成し、コントロールの名前をpropertyName+".day",propertyName+".month"および​​と命名しました。 @Html.DateSelect(m=>m.DateOfBirth)が、問題は、私は再びDateTimeで、前の3つのプロパティをマージする方法がわからないということです。

アイデアは、私の見解モデルでは、私はDateTimeプロパティを定義し、このヘルパーを呼び出すことです。

dateofbirth.daydateofbirth.monthdateofbirth.yearという3つのPOSTパラメータがあります。

どのようにMVC3で行われますか?

おかげ

答えて

1

カスタムモデルバインダーを使用する必要があります:

public class SplitDateTimeBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { 

     ValueProviderResult day = bindingContext.ValueProvider.GetValue("propertyName.day"); 
     ValueProviderResult month = bindingContext.ValueProvider.GetValue("propertyName.month"); 
     ValueProviderResult year = bindingContext.ValueProvider.GetValue("propertyName.year"); 

     DateTime result = new DateTime(int.Parse(year), int.Parse(month), int.Parse(day)); 

     return user; 
    } 
} 

とのGlobal.asaxに登録:

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

私は一例でint.Parse()を使用しています'LLましたおそらくint.TryParse()を使い、失敗したパースを適切に処理したいと思うでしょう。

+0

素晴らしい感謝! – vtortola

関連する問題