日期输入验证asp.net

时间:2015-03-13 12:50:07

标签: c# asp.net visual-studio-2010 validation datetime

在visual studio中工作,并在我的控制器类中使用名为GroupController的当前代码。在组页面上,我可以创建一个新组。然后,用户将为groupName,groupAssignment,groupLocation和GroupDateTime输入字符串值。我到目前为止的代码在下面提供,但很难找到日期的工作比较。我想确保输入日期大于当前日期。如果不是,则不允许用户创建组。有什么建议?谢谢

 public ActionResult Create([Bind(Include = "GroupID,GroupName,GroupAssignment,GroupLocation,GroupDateTime")] Group group)
    {
        var currentUser = manager.FindById(User.Identity.GetUserId());

        try
        {
            group.User = manager.FindById(User.Identity.GetUserId());
            db.Groups.Add(group);
            db.SaveChanges();
            return RedirectToAction("Index");          
        }
        catch (Exception /* dex */)
        {
            if(group.User == null)
            {
                ModelState.AddModelError("", "No user logged in");
            }
            else
            {
                ModelState.AddModelError("", "Unhandled Error");
            }
        }
        return View(group);
    }

2 个答案:

答案 0 :(得分:1)

try声明之前,您可以使用DateTime.TryParse。如果返回false,则向ModelState添加错误。如果它返回true,那么您有一个有效的日期和时间,然后可以与DateTime.Now进行比较。

所以:

DateTime temp;
if(!DateTime.TryParse(group.GroupDateTime, out temp))
{
    this.ModelState.AddError(....);
    return /* add action result here */
}

if(temp < DateTime.Now)
{
    this.ModelState.AddError(....)
    return /* add action result here */
}

...everything else...

更新#1:您应该考虑将Group的属性更改为更强类型,然后将GroupDateTime更改为DateTime。这也允许您使用内置验证属性,例如MaxLengthAttributeRequiredAttribute等。

答案 1 :(得分:1)

我建议您在模型(组)上使用自定义验证。您可以在GroupDateTime属性上使用CustomAttribute,如下所示:

[AttributeUsage(AttributeTargets.Property)]
public class FutureDateValidation : ValidationAttribute {
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) {
        DateTime inputDate = (DateTime)value;

        if (inputDate > DateTime.Now) {
            return ValidationResult.Success;
        } else {
            return new ValidationResult("Please, provide a date greather than today.", new string[] { validationContext.MemberName });
        }
    }
}


public class Group {
    [FutureDateValidation()]
    [DataType(DataType.Date, ErrorMessage = "Please provide a valid date.")]
    public DateTime GroupDateTime { get; set; }
}

为了保证数据类型验证,您应该使用属性[DataType(DataType.Date)]。您可以使用客户端脚本来放置掩码,例如,使用jquery-ui。

此外,您可以使用控制器或操作中的[授权]属性替换“无用户登录”,并在基本控制器上替换“未处理错误”覆盖HandleException。

我强烈建议您使用声明性验证。 http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc4/adding-validation-to-the-model