私は非常に単純な例でクライアント側検証を使用しようとしていますが動作しません。私はインターネットの既存の例から始めました。ここで非常に単純な例でクライアント検証が機能しませんでした
ことである(受け入れ答えを参照してください):
http://benjii.me/2010/11/credit-card-validator-attribute-for-asp-net-mvc-3/は、だから私は、ブランク溶液から開始し、価格はより大きいことを検証したいと思います:ASP .Net MVC 3 unobtrusive custom client validation
基本的に、それは解決策としてこのブログを使用しています最小。
マイコントローラ:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(MinPriceViewModel model)
{
if (!ModelState.IsValid)
return View(model);
return Content("Thank you very much");
}
}
マイビューモデル:
public class MinPriceViewModel
{
[MinPrice(MinPrice=9.99)]
[Required]
public double Price { get; set; }
}
検証のための属性(クライアント&サーバー):
public class MinPriceAttribute : ValidationAttribute, IClientValidatable
{
public double MinPrice { get; set; }
public override bool IsValid(object value)
{
if (value == null)
return true;
var price = Convert.ToDouble(value);
if (price < MinPrice)
{
return false;
}
return true;
}
public override string FormatErrorMessage(string name)
{
return "Attention le champ " + name + " ne contient pas un prix acceptable.";
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule
{
ErrorMessage = this.ErrorMessage,
ValidationType = "minprice"
};
}
}
ビュー:
@model MinPriceValidation.Models.MinPriceViewModel
@{
ViewBag.Title = "Home Page";
}
<script src="../../Scripts/jquery.validate.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
jQuery.validator.unobtrusive.adapters.addBool('minprice');
});
</script>
@using(Html.BeginForm())
{
@Html.LabelFor(m => m.Price)
@Html.TextBoxFor(m => m.Price)
@Html.ValidationMessageFor(m => m.Price)
<input type = submit />
}
私のコントローラのポストアクションにブレークポイントを設定して、クライアントまたはサーバーの検証が行われたかどうかを確認しました。ソリューションを実行して1を入力してサブミットすると、私のコントローラーでブレークポイントに達しました(ポストアクション)>>私は、クライアントの検証が決して使用されないと結論付けました。
私は基本的な例(クレジットカード検証)から開始し、私は(私は別のソリューションでそれをテストした)、このクレジットカードの検証がクライアント検証で働く知っているので、私は理解していませんでした。
私は少し失われています。
クライアントの検証がうまくいかなかった理由は何ですか?
ありがとうございました。
jQuery.validator.addMethod("minprice", function (value, element, param) {
// Perform tests here for client validation
return (value>10);
});
jQuery.validator.unobtrusive.adapters.addBool('minprice');
私はこの追加でテスト:
UPDATE
は多くのことをグーグルでの後、私は何人かの人々は、我々はこのようなクライアント検証用のJavaScript機能を必要とする告げることを見ますjavascript関数は動作しますが、クレジットカードの例では、クレジットカードを確認するためのjavascript関数はありません。
私はまだ失われています。
ゆーさんが正しいです。知りませんでした。ありがとうございます。 – Bronzato
これはうまくいくが、最低価格が変わったときは、プログラマーがコードを変更する必要がある。これはマーケティングルールであり、アプリケーションの再構築/再デプロイメントを行わずに非プログラマが動的に変更する必要があります。 – RickAndMSFT