私はこのようなモデルだ:カスタムモデルバインダー
public class MainModel
{
public string Id {get;set;}
public string Title {get;set;}
public TimePicker TimePickerField {get;set;}
}
TimePicker
を次のようになり、内部モデルである:
public class TimePicker
{
public TimeSpan {get;set;}
public AmPmEnum AmPm {get;set;}
}
私はカスタムモデルバインディングを作成しようとしています内部モデル用:TimePicker
質問:フォームにサブミットされたカスタムモデルバインダーの値をTimePicker
モデルに取得する方法フィールド?
私はこのようにそれを取得しようとした場合:私はちょうどvalue
でnull
を取得
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
。
モデルバインダーを正しく実装する方法がわかりません。
public class TimePickerModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException("bindingContext");
}
var result = new TimePicker();
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (value != null)
{
bindingContext.ModelState.SetModelValue(bindingContext.ModelName, value);
try
{
//result = Duration.Parse(value.AttemptedValue);
}
catch (Exception ex)
{
bindingContext.ModelState.AddModelError(bindingContext.ModelName, ex.Message);
}
}
return result;
}
}
あなたの質問から、どのような値が提出され、どのように表示されるかは不明です。なぜこのモデルにカスタムモデルのバインダーが必要なのか、その目的が正確になるのかははっきりしていません。また、 'IModelBinder'を直接実装しているのか、' DefaultModelBinder'をサブクラス化しているのかは明らかではありません。もう一つは、このモデルバインダーのどのメソッドで、 'bindingContext.ValueProvider.GetValue(bindingContext.ModelName);'を呼び出そうとしているのですか?(明らかに、IModelBinderを直接実装する場合は、単一のメソッドがあります:BindModel) 。 –
ビューには、時間のあるテキストフィールドと、PM/AM選択のある2つのラジオボタンという2つのフィールドがあります。実装する必要があるかIModelBinderを直接またはサブクラスDefaultModelBinderか分からない。それについてアドバイスを受けるのは本当にいいですね。はい私はBindModelでそれを呼び出す私のバインダーを私の質問に追加しました。 – Mindaugas
あなたのコードを見る機会がありますか?また、カスタムモデルバインダーがなぜ必要なのか、私の質問には答えませんでした。あなたは正確に何を達成しようとしていますか? –