Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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# 更改viewmodel中的ModelState(添加自定义验证)_C#_Jquery_Validation_Viewmodel_Modelstate - Fatal编程技术网

C# 更改viewmodel中的ModelState(添加自定义验证)

C# 更改viewmodel中的ModelState(添加自定义验证),c#,jquery,validation,viewmodel,modelstate,C#,Jquery,Validation,Viewmodel,Modelstate,我是网络编程新手,我不得不使用jquerydatatime插件。我在数据时间转换中遇到了很多问题,所以我制定了一个简单但怪异且冗长的逻辑来处理它。 而不是创建一个DateTime属性。我做了两个,一个是字符串,另一个是ViewModel中的可空Datetime public DateTime? InitialStartDate { get { return istartDate; } set

我是网络编程新手,我不得不使用jquerydatatime插件。我在数据时间转换中遇到了很多问题,所以我制定了一个简单但怪异且冗长的逻辑来处理它。 而不是创建一个DateTime属性。我做了两个,一个是字符串,另一个是ViewModel中的可空Datetime

  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";
              }
            }
        }
    }
注意:所有这些代码都是在ViewModel中编写的

  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";
              }
            }
        }
    }
请告诉我如何妥善处理此事

其次

例如,这个逻辑很好,然后我想添加ModelState错误。例如

            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 它将抛出一个异常。我不希望它抛出异常,而是添加验证错误,所以稍后在控制器中检查ModelState.IsValid时 它返回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; }
试试这个

$(函数(){
$(“#日期选择器”)。日期选择器({
变化月:对,
变化年:是的,
年份范围:“2011:2037”,
日期格式:“日/月/年”,
minDate:0,
defaultDate:空
}).on('change',function()){
$(this).valid();//触发验证测试
//“$(this)”指“$”(“#日期选择器”)”
});

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

看法

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


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

您想解决什么样的问题?在带有jquery datetime插件的MVC中,我经常将jquery datepicker与
Html.editor一起使用,当给定无效的日期时间格式时,将模型发送到控制器并执行
ModelState.AddModelError(“消息”)
。请尽可能向我解释详细的预期结果。@TetsuyaYamamoto在问题的末尾添加了更多的文本。
变量从何处获取数据?如果你有模型课,就展示出来。我发现您想使无效的日期时间格式的
ModelState
无效,并在视图中显示错误消息。@TetsuyaYamamoto添加了更多文本。请看一看
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");
}