Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC中日期时间的验证_C#_Asp.net Mvc 4_Razor - Fatal编程技术网

C# MVC中日期时间的验证

C# MVC中日期时间的验证,c#,asp.net-mvc-4,razor,C#,Asp.net Mvc 4,Razor,来自winforms,我对MVC和学习还很陌生。所以请容忍我。 我试图在MVC中以正确的方式进行一些验证。我有一些使用JS的代码,但我想修改它以使用MVC进行验证 这是我的模型 public class MyViewModel { /// <summary> /// Start Date /// </summary> [DataType(DataType.Date)] [DisplayFormat(DataFormatStri

来自winforms,我对MVC和学习还很陌生。所以请容忍我。 我试图在MVC中以正确的方式进行一些验证。我有一些使用JS的代码,但我想修改它以使用MVC进行验证

这是我的模型

public class MyViewModel
{

    /// <summary>
    /// Start Date
    /// </summary>
     [DataType(DataType.Date)] 
    [DisplayFormat(DataFormatString = "{0:d}",ApplyFormatInEditMode=true)]
    [Display(ResourceType = typeof(UIResources.GeneralPurpose), Name = "StartDate")]
    public DateTime StartDate { get; set; }

    /// <summary>
    /// End Date
    /// </summary>
     [DataType(DataType.Date)]
     [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
     [Display(ResourceType = typeof(UIResources.GeneralPurpose), Name = "EndDate")]
    public DateTime EndDate { get; set; }
}
公共类MyViewModel
{
/// 
///开始日期
/// 
[数据类型(DataType.Date)]
[DisplayFormat(DataFormatString=“{0:d}”,ApplyFormatInEditMode=true)]
[显示(ResourceType=typeof(UIResources.GeneralPurpose),Name=“StartDate”)]
公共日期时间起始日期{get;set;}
/// 
///结束日期
/// 
[数据类型(DataType.Date)]
[DisplayFormat(DataFormatString=“{0:d}”,ApplyFormatInEditMode=true)]
[显示(ResourceType=typeof(UIResources.GeneralPurpose),Name=“EndDate”)]
公共日期时间结束日期{get;set;}
}
这就是我的html的外观

@model MyViewModel
@using ...
{
    <div id="ErrMsg" class="validation-summary-errors center">
    </div>

    using (Ajax.BeginForm("someAction", "someController", new AjaxOptions()))
    {

        @Html.ValidationSummary()

        <fieldset class="control-set-container no-border">
            <ul class="undecorated-list inline-list-items">
                <li>
                    @Html.LabelFor(model => model.StartDate)
                    @Html.MyDateTimePicker(model => model.StartDate)
                </li>
                <li>
                    @Html.LabelFor(model => model.EndDate)
                    @Html.MyDateTimePicker(model => model.EndDate)
                </li>
            </ul>
        </fieldset>
    }
@model MyViewModel
@使用。。。
{
使用(Ajax.BeginForm(“someAction”、“someController”、新的AjaxOptions())
{
@Html.ValidationSummary()
  • @LabelFor(model=>model.StartDate) @MyDateTimePicker(model=>model.StartDate)
  • @LabelFor(model=>model.EndDate) @MyDateTimePicker(model=>model.EndDate)
}
@MyDateTimePicker编写一些Html,给出一个文本框和一个datepicker控件(用于以某种日期格式显示日期的文本框)

这就是我想要验证的

  • 如果日期格式不正确(dd/MM/yyyy),则应将errMsg.Html设置为视图模型中指定的消息
  • 如果startDate大于endDate,则在errMsg.Html中显示消息
  • 当我进行验证时,我想验证日期是否为两种不同格式(dd/MM/yyyy或M/d/yyyy)中的一种,并在验证失败时显示错误消息
  • 参数值“input”将接受datetime控件的对象

    var obj=$('#txtDatetime');
    

    Call-CheckDate(obj);
    要验证的地方

    MVC允许您通过使用
    远程
    属性或创建新属性来创建自定义验证属性

    Remote
    属性允许您让jquery在字段验证期间向指定的方法发送Ajax调用,此时将抛出onfocusout事件

    例如,我的UserController中有一个方法,可以确保同一用户ID在应用程序中不会被使用两次:

    [Remote("UnicityUserId", "User", ErrorMessageResourceName = "ErrorUnicity", ErrorMessageResourceType = typeof(Resources.Resources), AdditionalFields = "ID")]
    public string UserId {get;set;}
    
    然后,在我的控制器中:

    public JsonResult UnicityUserId(string UserId, string ID)
    {
        int id = 0;
        Int32.TryParse(ID, out id);
        bool ok = false;
    
        if (!String.IsNullOrEmpty(UserId))
            ok = !UserDb.Exist(this.db, this.Tracer, UserDb.UserId, UserId, id); //Checks wether there is already another user with the same UserId
    
        return (Json(ok, JsonRequestBehavior.AllowGet));
    }
    
    更多信息

    另一种验证模式是在MVC将接收您的POST数据并尝试将其绑定到您的模型时执行的

    对于此方法,必须创建自己的属性

    仍然来自unicity示例:

    public class UnicityAttribute : ValidationAttribute
    
    此类必须实现名为
    IsValid
    的方法,该方法将执行验证并将
    ValidationResult
    返回给MVC的ModelBinder

    为了确保MVC会调用它,只需将属性放在字段上:

    [UnicityAttribute]
    public string UserId {get;set;}
    
    更多信息

    在此处输入代码
    使用制度;
    使用System.Collections.Generic;
    使用System.ComponentModel.DataAnnotations;
    使用System.Web.Mvc;
    名称空间属性
    {
    [AttributeUsage(AttributeTargets.Property)]
    公共密封类MinimumPaymentDateAttribute:ValidationAttribute,IClientValidable
    {
    私有只读字符串错误消息;
    公共字符串ValidationErrorMessage{get{return errorMessage;}}
    /// 
    ///初始化变量的构造函数
    /// 
    public MinimumPaymentDateAttribute()
    {
    }
    /// 
    ///初始化变量的构造函数
    /// 
    /// 
    public MinimumPaymentDateAttribute(字符串验证错误消息)
    {
    this.errorMessage=validationErrorMessage;
    }
    /// 
    ///为实现客户端验证的规则进行验证
    /// 
    /// 
    /// 
    /// 
    受保护的重写ValidationResult有效(对象值,ValidationContext ValidationContext)
    {
    if(null!=validationContext)
    {
    PaymentInformation paymentInfo=(PaymentInformation)validationContext.ObjectInstance;
    if(值!=null&&validationContext!=null)
    {
    如果(paymentInfo.PaymentDate[UnicityAttribute]
    public string UserId {get;set;}
    
        enter code here
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Web.Mvc;
    
    namespace Attributes
    {
        [AttributeUsage(AttributeTargets.Property)]
        public sealed class MinimumPaymentDateAttribute : ValidationAttribute, IClientValidatable
        {
            private readonly string errorMessage;
            public string ValidationErrorMessage { get { return errorMessage; } }
            /// <summary>
            /// Constructor for intializing variables
            /// </summary>
            public MinimumPaymentDateAttribute()
            {
            }
    
            /// <summary>
            ///  Constructor for intializing variables
            /// </summary>
            /// <param name="validationErrorMessage"></param>
            public MinimumPaymentDateAttribute(string validationErrorMessage)
            {
                this.errorMessage = validationErrorMessage;
            }
            /// <summary>
            /// Validation for of Rule implement Client Validation
            /// </summary>
            /// <param name="value"></param>
            /// <param name="validationContext"></param>
            /// <returns></returns>
            protected override ValidationResult IsValid(object value, ValidationContext validationContext)
            {
                if (null != validationContext)
                {
                    PaymentInformation paymentInfo = (PaymentInformation)validationContext.ObjectInstance;
                    if (value != null && validationContext != null)
                    {
                        if (paymentInfo.PaymentDate < paymentInfo.MinDate)
                        {
                            return new ValidationResult(this.ValidationErrorMessage);
                        }
                    }
                }
                return ValidationResult.Success;
            }
    
            /// <summary>
            ///  Validation rules client side for Minimum Date
            /// </summary>
            /// <param name="metadata"></param>
            /// <param name="context"></param>
            /// <returns>IEnumerable<ModelClientValidationRule></returns>
            public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
            {
                string errorMessage = this.FormatErrorMessage(metadata.DisplayName);
                ModelClientValidationRule MinDateRule = new ModelClientValidationRule();
                DateTime? validationData = GetValidationParameters(context.Controller.ViewData.Model);
                MinDateRule.ErrorMessage = errorMessage;
                MinDateRule.ValidationType = "validminpaymentdate";(Java script function name)
                MinDateRule.ValidationParameters.Add("mindate", validationData);
                yield return MinDateRule;
            }
    
    
            /// <summary>
            ///  Checking for Model type for handling Different ViewData
            /// </summary>
            /// <param name="model"></param>   
            /// <returns>string[]</returns>
            private static DateTime? GetValidationParameters(object model)
            {
                DateTime? MinDate=null;
                if (model.GetType() == typeof(PaymentInformation))
                {
                    PaymentInformation obj = (PaymentInformation)model;
                    return obj.MinDate;
                }
                else if (model.GetType() == typeof(PaymentViewModel))
                {
                    PaymentViewModel obj = (PaymentViewModel)model;
                    return obj.PaymentInfo.MinDate;
                }
                return MinDate;
            }
        }
    }
    
    
    $.validator.addMethod("validminpaymentdate", function (value, element, params) {
        var valid = true;
        var mindate = new Date(params);
        var valdate = new Date(value);
        if (valdate < mindate) {
            valid = false;
        }
        return valid;
    
    });
    $.validator.unobtrusive.adapters.addSingleVal("validminpaymentdate", "mindate");