2012-03-24 11 views
0

私は非常に単純な例でクライアント側検証を使用しようとしていますが動作しません。私はインターネットの既存の例から始めました。ここで非常に単純な例でクライアント検証が機能しませんでした

ことである(受け入れ答えを参照してください):

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関数はありません。

私はまだ失われています。

答えて

1

私はあなたがfollowing postにrefferingしていると仮定カスタムjavascript関数の必要性なしで動作します。

credit card validation ruleは、jquery validateプラグインに直接組み込まれています。そのため、カスタム検証機能を記述する必要はありません。

minpriceルールに関する限り、そのようなことはないので、minpriceの意味を定義するカスタムJavaScript関数を記述する必要があります。

これは、私はあなたが単に行うことができますよう、あなたがこの属性を持ついくつかの車輪の再発明している感覚を得る言われている:

[Range(9.99, double.MaxValue)] 
[Required] 
public double Price { get; set; } 

、我々は価格について話していることから、上のdecimal型を使用することをお勧めしますあなたのモデル:

[Range(9.99, double.MaxValue)] 
[Required] 
public decimal Price { get; set; } 

これで、クライアント側とサーバー側の自動検証が自動的に行われます。

+0

ゆーさんが正しいです。知りませんでした。ありがとうございます。 – Bronzato

+0

これはうまくいくが、最低価格が変わったときは、プログラマーがコードを変更する必要がある。これはマーケティングルールであり、アプリケーションの再構築/再デプロイメントを行わずに非プログラマが動的に変更する必要があります。 – RickAndMSFT

1

これらの設定は、web.configファイルに真であることを確認してください:

<appSettings> 
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
    </appSettings> 

そして、このスクリプトは、ページ内に含まれます:あなたはクレジットカードでこれを使っている人を見ていると言う

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
+0

はい、設定はmy web.configで正しいですし、スクリプトは含まれていますが運がまだありません。とにかくありがとう。 – Bronzato

+0

が更新されました。あなたの利回りが原因である可能性があります。 –

+0

List <...で変更されても動作しません。 – Bronzato

関連する問題