0

私のmvc3ページには、rate、minrate、maxrateの3つのフィールドがあります。レートは、minrateより高く、maxrateより低くする必要があります。mvc3モデルの検証でこれをどのように達成できますか?これはモデルです:

   [Required(ErrorMessage = "Rate Required")]
    [Range(1, 9999999.999, ErrorMessage = "Invalid Rate")]

     public decimal rate
    {
        get;
        set;
    } 
    /// <summary>
    //min Rate
    /// </summary>
      [Required(ErrorMessage = "Min.Rate Required")]
      [Range(1, 9999999.999, ErrorMessage = "Invalid Rate")]

    public decimal minRate
    {
        get;
        set;
    }
    /// <summary>
    //max Rate
    /// </summary>
      [Required(ErrorMessage = "Max.Rate Required")]
      [Range(1, 9999999.999, ErrorMessage = "Invalid Rate")]

    public decimal maxRate
    {
        get;
        set;
    }

編集:

javascriptを使用してクライアント側で比較を実行してみました。検証メッセージを動的に変更する方法を見つけることができれば(例:maxrateフィールドの場合は「Max.Raterequired」)、問題を解決できます。それを行う方法はありますか?

私はこれを試しました:(一部のコードは省略されています)

//...........................
$('#Save').click(function(){

  if (parseFloat(maxrate) < parseFloat(rate)) {

                  $('#maxRateforvalidation').text("Rate must be less than maxrate");
//It works but the styles for the validation message are not applied

                $('#maxRateforvalidation').show();
                 return false;
             }
});

編集:

cshtmlページのコードの関連部分は次のとおりです。

  @using (Html.BeginForm("Saveaction", "mycontroller", FormMethod.Post))
     {

     ..................
     <dt>Rate</dt>
     <dd>@Html.TextBoxFor(model => model.rate, new { style = "width:28%"}) 
          @Html.ValidationMessageFor(model => model.rate)  
     </dd> 
     <dt>minRate</dt>
     <dd>@Html.TextBoxFor(model => model.minrate, new { style = "width:28%"}) 
          @Html.ValidationMessageFor(model => model.minrate)  
     </dd>
     <dt>maxRate</dt>
     <dd>@Html.TextBoxFor(model => model.maxrate, new { style = "width:28%"}) 
          @Html.ValidationMessageFor(model => model.maxrate)  
     </dd>
   .........................

 <button type="submit" id="Save" >  Save(F2)</button>

}

編集:

実行時に生成されたコードのレートフィールドを確認しました。空白のままにして[送信]ボタンをクリックしました。

<span id="minRateforvalidation" class="field-validation-error" data-valmsg-replace="true" data-valmsg-for="minRate" style="display: inline;">
<span class="" htmlfor="minRate" generated="true">Min.Rate Required</span>
</span>

だから私はこのようにコードを更新しました:

if(parseFloat(maxrate)<parseFloat(rate)){

                    $('#maxRateforvalidation').html('<span class="" htmlfor="maxRate"  generated="true" style="visibility: hidden;">Max.Rate must be higher than rate</span>');


                     $('#maxRateforvalidation').addClass("field-validation-error");

                  $('#minRateforvalidation').show();
                  return false;
                }

これで動作します。ただし、firebugでコンテンツを確認して送信した場合のみです。理由を理解することはできません。以下に示すように、モデル自体に範囲を設定するなど、この検証を実行するためのより簡単な方法はありますか?

 [Required(ErrorMessage = "Min.Rate Required")]
       [Range(1, rate, ErrorMessage = "Invalid Rate")]// cant do it.

        public decimal minRate
        {
            get;
            set;
        }
4

0 に答える 0