69
A
答えて
161
はここで続行する方法です、それはIClientValidatableを実装する方法
public class FutureDateAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
if (value == null || (DateTime)value < DateTime.Now)
return false;
return true;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule
{
ErrorMessage = this.ErrorMessage,
ValidationType = "futuredate"
};
}
}
注意してください。そして、コントローラ
public class MyViewModel
{
[FutureDate(ErrorMessage = "Should be in the future")]
public DateTime Date { get; set; }
}
:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel
{
// intentionally put in the past
Date = DateTime.Now.AddDays(-1)
});
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return View(model);
}
}
し、最終的にビュー:
@using (Html.BeginForm())
{
@Html.LabelFor(x => x.Date)
@Html.TextBoxFor(x => x.Date)
@Html.ValidationMessageFor(x => x.Date)
<input type="submit" value="OK" />
}
魔法が起こるためには最後の部分は、カスタムアダプタを定義することです次に、我々は我々のモデルを書きます:
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
<script type="text/javascript">
// we add a custom jquery validation method
jQuery.validator.addMethod('greaterThan', function (value, element, params) {
if (!/Invalid|NaN/.test(new Date(value))) {
return new Date(value) > new Date($(params).val());
}
return isNaN(value) && isNaN($(params).val()) || (parseFloat(value) > parseFloat($(params).val()));
}, '');
// and an unobtrusive adapter
jQuery.validator.unobtrusive.adapters.add('futuredate', { }, function (options) {
options.rules['greaterThan'] = true;
options.messages['greaterThan'] = options.message;
});
</script>
4
あなたの質問を頼まれましたが、あなたはまだ、メタデータのような場合、あなたはまだ単純化された選択肢のために開いている、あなたは以下のアノテーションを使用して、あなたの問題を解決することができるのでながら少し:
[Required]
[AssertThat("Date > Now()")]
public DateTime? Date { get; set; }
これは、両方のために働く - サーバとクライアント、箱から出してください。詳細はExpressiveAnnotationsライブラリをご覧ください。
+0
あなたのライブラリーで1日を保存しました。使い方が簡単でとても便利です。ありがとう – Maco
関連する問題
- 1. カスタム検証属性を作成する方法は?
- 2. は、カスタム属性
- 3. カスタム属性vs data- *属性
- 4. XHTML検証、カスタム名前空間、属性
- 5. htmlunitはカスタムHTML属性( "expando属性")で動作しますか?
- 6. C# - カスタム属性
- 7. htmlpurifierカスタム属性
- 8. TwoLineListItem - カスタム属性
- 9. データの注釈とコードを使用したカスタム検証属性
- 10. MVC 2 vs MVC 3 DataAnnotationsModelValidatorProvider.RegisterAdapterを使用したカスタム検証属性
- 11. Reflectionを使用したカスタム検証属性?
- 12. mvc3カスタム検証属性がクライアント側で検証されない
- 13. カスタムMVC3キャッシュフィルタ属性
- 14. Androidのカスタム属性
- 15. ActionResultのカスタム属性
- 16. jQueryの:カスタム属性
- 17. カスタムDataAnnotationの属性
- 18. クラスメンバーのカスタム属性
- 19. ユニットのカスタム検証属性をユニットテストするには
- 20. カスタムCSSプロパティまたはHTML属性?
- 21. カスタム属性のmvc3アクションメソッドパラメータの検索
- 22. check_box_tagでカスタム属性を生成
- 23. リクエストを検証するMVCカスタム許可属性
- 24. Yii2、属性名を持つカスタム検証メッセージ
- 25. Fluent NHibernate ShouldMapが私のカスタム属性を検出しない
- 26. apacheでカスタム属性を作成する方法は?
- 27. asp.net mvc5でカスタムathorization属性を作成する方法は?
- 28. カスタムJSFコンポーネントの属性リスト
- 29. Androidフラグメントのカスタム属性
- 30. jqueryでカスタム属性にアクセス
鮮やかな答え! – raklos
ほとんどの作業 - 日付はどのような形式ですか? – raklos
@raklosは、ブラウザーとサーバーのローカライズ設定に依存します。違いがある場合は、1つのフォーマットがクライアントの検証に合格する可能性はありますが、サーバの検証には合格する可能性があります。また、あなたの日付がどのような形式であるかを決めることはあなた次第です。 –