0
日時が有効であることを確認する必要があります。日時データ注釈が機能しない
レイザーMVC3
クラス
[Range(typeof(DateTime), "1/1/1930", "1/1/2112",
ErrorMessage = "Value for {0} must be between {1} and {2}")]
public DateTime DOB { get; set; }
編集ビューフォーム
<span class="editor-field">
@Html.EditorFor(model => model.DOB)
@Html.ValidationMessageFor(model => model.DOB)
検証が無効な日付をキャッチするが、有効な日付が入力されたときにエラーをクリアしないので、フォーム吊るされている。誰かが、Validationを使ってdatetimeが有効かどうかをチェックする作業方法を知っていますか?
おかげで、ジョー
更新コントローラーのアクション
[HttpPost]
public ActionResult Create(Talent talent)
{
talent.Modified = talent.Created = DateTime.Now;
if (talent.DOB < DateTime.Now.AddYears(-100) || talent.DOB > DateTime.Now)
{
talent.DOB = DateTime.Parse("0001/01/01"); talent.Skill = "changed";
return View(talent); }
決勝コントローラとPostアクション
string errorMessageDOB = "DOB is out of range, it needs to be between " + DateTime.Now.AddYears(-100).ToShortDateString()
+ " and " + DateTime.Now.ToShortDateString() + ".";
//
// POST: /Talent/Create
[HttpPost]
public ActionResult Create(Talent talent)
{
talent.Modified = talent.Created = DateTime.Now;
if (talent.DOB < DateTime.Now.AddYears(-100) || talent.DOB > DateTime.Now)
{ ModelState.AddModelError(string.Empty, errorMessageDOB); }
スチュアートはいくつかの素晴らしいコードを書いていますが、それは私が望むものよりずっと複雑で、私は生年月日の日付選択をしたくありません。 POSTアクションにコードを追加しました(更新された質問を参照)。それは正常に範囲の日付をトラップし、デバッガでそれを見るときにDOBとスキルのフィールドを更新しますが、ビューが再表示されても古い値が残っています(DOBを1/1/0001は、有効期限が必要な検証を開始します。スキルはテストのためのものです)。ビューで編集したフィールドが更新されない理由をご存知ですか? – Joe
これは、モデルで設定した値ではなく、ビューを再表示するときにHTMLヘルパーがModelStateの値を使用していることが原因である可能性があります。変更を有効にするには、モデル状態から値を削除する必要があります。例えば、あなたはあなたのaction => 'ModelState.Remove(" Modified ")に' Modified'、 'DOB'と' Skill'のプロパティを設定しようとしているようです。 ModelState.Remove( "DOB"); ModelState.Remove( "スキル"); '。 –
ModelStateを見ている間にこの解決策が見つかりました。[1]:http://stackoverflow.com/questions/5739362/modelstate-addmodelerror-how-can-i-add-an-error-that-isnt-for-a-property ModelState.AddModelError();コードの更新されたPOSTを参照してください。 – Joe