【问题标题】:Client side validation mvc dropdown客户端验证 mvc 下拉菜单
【发布时间】:2013-11-23 04:09:45
【问题描述】:
@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 验证,但不确定最好的选择是什么?

谢谢

【问题讨论】:

  • 可以使用jquery进行比较,下拉列表
  • 为什么不使用模型验证?实现 IValidatableObject - 最简单的方法。
  • @AndreiMikhalevich,是的,当“好奇”用户绕过客户端验证时,服务器端验证将防止错误。
  • 通过使用jquery我们可以比较onchange事件的值。

标签: c# asp.net-mvc validation model-view-controller


【解决方案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-validators/

【讨论】:

    猜你喜欢
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多