1

コントローラー アクションのコンテキスト外でモデル バインディングの問題が発生しています。次のコードを使用してバインディングを処理していますが、ほとんどすべてのシナリオで機能していますが、「DateTime?」タイプのプロパティにフォールオーバーしているようです。誰にもアイデアはありますか?この例では、TEntity はブログ投稿を表す POCO であるため、文字列や long などの多数のフィールドがあり、これらはすべて拘束力があります。バインドに失敗しているのは、オプションの日時 (この例では "PublishStart" および "PublishEnd" と呼ばれます) だけです。BindModel から返される結果には、常にこれらの null 値が含まれます。フォーム コレクションの入力では、日時に常に「dd/MM/yyyy」の形式が使用されます。

デバッグ モードでコードをステップ実行する際に、valueProvider.GetValue("PublishStart") を使用してみました。これはエラーをスローせず、RawValue に期待するものを示しますが、取得方法がわかりません。その結果から値を取得して、解析が成功したかどうかを確認します。

私が使用しているコードは以下のとおりです。誰にもアイデアはありますか?

var valueProvider = new NameValueCollectionValueProvider(formCollection, null);
var metadata = ModelMetadataProviders.Current.GetMetadataForType(null,
               typeof(TEntity));

var bindingContext = new ModelBindingContext
{
    ModelName = "",
    ValueProvider = valueProvider,
    ModelMetadata = metadata
    };

var controllerContext = new ControllerContext();
var binder = new DefaultModelBinder();

// act    
TEntity actual = (TEntity)binder.BindModel(controllerContext, bindingContext);

Global ASAX には、デフォルトのモデル バインダーを設定するための次の機能があります。

System.Web.Mvc.ModelBinders.Binders.DefaultBinder = new DefaultModelBinder();
4

1 に答える 1