更改模型状态 在视图中模型(添加自定义验证)

本文关键字:模型 添加 自定义 验证 视图 状态 | 更新日期: 2023-09-27 17:57:06

我是Web编程的新手,我不得不使用Jquery datatime插件。我在数据时间转换中遇到了很多问题,所以我做了一个简单的但奇怪而冗长的逻辑来处理它。而不是创建一个日期时间属性。我做了两个,一个是字符串,另一个是可空的日期时间在视图模型中

注意:所有这些代码都是用视图模型编写的

  public DateTime? InitialStartDate
    {
        get
        {
            return istartDate;
        }
        set
        {
            istartDate = value;
        }
    }
    public string IStartDateString
    {
        get
        {
            if (istartDate == null)
            {
                return "";
            }
            else
            {
                return istartDate.Value.ToString("MM/dd/yyyy");
            }
        }
        set
        {
            if (string.IsNullOrEmpty(value))
            {
                istartDate = null;
            }
            else
            {
                DateTime TempDate=DateTime.Min;
                if(DateTime.TryParseExact(value, "MM/dd/yyyy", CultureInfo.InvariantCulture, out TempDate)
                {
                  InitialStartDate=TempDate;
                }
                 else{
                  InitialStartDate=null;
                  ErrorMessage="Can not convert date";
              }
            }
        }
    }

请告诉我如何很好地处理它。

其次

例如,这个逻辑很好,然后我想添加模型状态错误。例如

            if(DateTime.TryParseExact(value, "MM/dd/yyyy", CultureInfo.InvariantCulture, out TempDate)
                {
                  InitialStartDate=TempDate;
                }
                 else{
                  InitialStartDate=null;
                  ModelState.AddError('Date is not right ');
              }

有没有这样的事情。请帮助并非常感谢您阅读我的所有问题:)

例如,我像那样解析它

InitialStartDate= DateTime.ParseExact(value, "MM/dd/yyyy", CultureInfo.InvariantCulture);

值为 1/1/201它将引发异常。我不希望它抛出异常但添加验证错误,所以稍后当我检查模型状态时在控制器中。它返回 false,我可以在视图中显示它。

      @Html.LabelFor(model => model.InitialStartDate, htmlAttributes: new { @class = "control-label col-offset-2" })
      @Html.TextBoxFor(model => model.IStartDateString, new { @id = "initialstartdate", value = Model.IStartDateString, @class = "form-control", tabindex = "34" })
      @Html.ValidationMessageFor(model => model.InitialStartDate, "", new { @class = "text-danger" })

我正在从视图中设置其值。

与我的模型中的所有其他属性。我有这个

       [DataType(DataType.Date)]
       public DateTime? StartTime { get; set; }

更改模型状态 在视图中模型(添加自定义验证)

试试这个

$(function() {
    $("#datepicker").datepicker({
        changeMonth: true,
        changeYear: true,
        yearRange: '2011:2037',
        dateFormat: 'dd/mm/yy',
        minDate: 0,
        defaultDate: null
    }).on('change', function() {
        $(this).valid();  // triggers the validation test
        // '$(this)' refers to '$("#datepicker")'
    });
});

希望对您有所帮助。

使用 try-catch 块并将ModelState.AddModelError添加到代码中:

视图

<script type="text/javascript">
    $(document).ready(function() {
        $("#initialstartdate").datepicker({
            changeMonth: true,
            changeYear: true,
            dateFormat: 'MM/dd/yyyy',
            minDate: 0,
            defaultDate: null
            // see jQuery datepicker docs for more attributes
        }).change(function() {
            $(this).valid(); // validation test
        });
    });
</script>
<!-- EditorFor used to include datetime as is -->
@Html.EditorFor(model => model.IStartDateString, new { @id = "initialstartdate", value = Model.IStartDateString, @class = "form-control", tabindex = "34" });

控制器

try {
        if(DateTime.TryParseExact(value, "MM/dd/yyyy", CultureInfo.InvariantCulture, out TempDate)
        {
             InitialStartDate=TempDate;
        }
        else 
        {
             InitialStartDate = null;
             ModelState.AddModelError("Date is not right");
        }
}
catch (ArgumentException e)
{
    ModelState.AddModelError("Date is not right");
}

ModelState.AddModelError将使ModelState无效,因此IsValid属性在返回视图时变得false

可能这与您当前的需求相去甚远,因此欢迎任何建议。