私の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;
}