2
@using (Html.BeginForm("ForatExcel", "ForatSummary", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.DropDownList("ForatFrom", new SelectList(Model, "ID", "ID", new { onchange = "getAllData()" }))
@Html.DropDownList("ForatTo", new SelectList(Model, "ID", "ID", new { onchange = "getAllData()" }))
<br />
<input type="submit" id="btnForatVersion" value="Go"/> 
}

「ForatFrom」ドロップダウン値が「ForatTo」値より大きいことを検証する必要があります。ドロップダウンの値が特定の数値であることを確認するだけなので、モデルの検証は使用できないと思います。おそらくjqueryの検証を考えていましたが、最良のオプションが何であるかわかりませんか?

ありがとう

4

1 に答える 1

1

モデル検証を使用できますし、使用する必要があります。次のような検証属性 [LargerThan] を実装します。

public class LargerThanAttribute: ValidationAttribute, IClientValidatable
{
     private string _listPropertyName { get; set; }

     public LargerThanAttribute(string listPropertyName)
     {
         this._listPropertyName = listPropertyName;
     }

     protected override ValidationResult IsValid(object value, ValidationContext validationContext)
     {
        if(value == null)
            return new ValidationResult("Not a valid value");

        var listProperty = validationContext.ObjectInstance.GetType().GetProperty(_listPropertyName);
        double propValue = Convert.ToDouble(listProperty.GetValue(validationContext.ObjectInstance, null));

        if(propValue <= Convert.ToDouble(value))
            return ValidationResult.Success;

        return new ValidationResult("End value is smaller than start value");
    }
}

このコードはテストされていませんが、この行に沿って何かを記述して別のクラスに配置すると、この種のチェックを行う必要があるときにいつでも再利用できます。モデルのプロパティに配置できるようになりました

public double ForatFrom { get; set; }

[LargerThan("ForatFrom")]
public double ForatTo { get; set; }

これで、サーバー モデルの検証が完了しました。必要に応じて、jQuery の目立たない検証を実装できます。私の意見では、検証が必要な場合は少なくともサーバーで実行し、クライアントで実行する必要がある場合はそこでも実装する必要がありますが、クライアントの検証だけに依存することはありません。

これは、私が今何をしたかを示し、クライアント検証を実装する方法を説明する、あなたが読むことができる良い投稿です: http://thepursuitofalife.com/asp-net-mvc-3-unobtrusive-javascript-validation-with-custom -バリデーター/

于 2013-11-11T13:07:20.237 に答える