を実装するクラスを作成しましたIModelBinder
(以下を参照)。このクラスは、それぞれが日付値の一部 (日、月、年) を表す 3 つの入力を持つフォームを処理します。HtmlHelper
また、フォームに 3 つのフィールドを出力するための対応する拡張メソッドも作成しました。
日、月、年の入力に解析可能な値が与えられたが、別の値が検証に失敗した場合、すべて問題ありません。フィールドが再入力され、期待どおりにページがユーザーに提供されます。
ただし、無効な値が指定さDateTime
れ、解析できないDateTime
場合は、ユーザーに返されるときにフィールドが再設定されるように任意の値を返します。
私は人々が抱えていた同様の問題について読みましたが、それらはすべて電話の欠如が原因のようSetModelValue()
でした. 私はこれを行っていませんでしたが、問題を追加しても解決されていません。
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
string modelName = bindingContext.ModelName;
string monthKey = modelName + ".Month";
string dayKey = modelName + ".Day";
string yearKey = modelName + ".Year";
//get values submitted on form
string year = bindingContext.ValueProvider[yearKey].AttemptedValue;
string month = bindingContext.ValueProvider[monthKey].AttemptedValue;
string day = bindingContext.ValueProvider[dayKey].AttemptedValue;
DateTime parsedDate;
if (DateTime.TryParse(string.Format(DateFormat, year, month, day), out parsedDate))
return parsedDate;
//could not parse date time report error, return current date
bindingContext.ModelState.AddModelError(yearKey, ValidationErrorMessages.DateInvalid);
//added this after reading similar problems, does not fix!
bindingContext.ModelState.SetModelValue(yearKey, bindingContext.ValueProvider[modelName]);
return DateTime.Today;
}
日付の Year プロパティのテキストボックスを作成しようとすると、null 参照例外がスローされますが、不思議なことに、Day または Month ではありません!
これがなぜなのか説明できる人はいますか?