未显示ASP.NET MVC日期查看

时间:2016-07-14 17:26:18

标签: asp.net-mvc validation time format data-annotations

几乎工作。只剩下一个问题了。

加载我的"查看"

时,相应的输入字段中未显示此字段
[DataType(DataType.Date)]
[Display(Name = "Ínicio do contrato")]
public DateTime? DataInicio { get; set; }

[DataType(DataType.Date)]
[Display(Name = "Fim do contrato")]
public DateTime? DataFim { get; set; }

此模型属性不为空,但不会显示在视图

<div class="form-group">
            @Html.LabelFor(model => model.DataInicio, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.DataInicio, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.DataInicio, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.DataFim, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.DataFim, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.DataFim, "", new { @class = "text-danger" })
            </div>
        </div>

我找到了实体框架工作问题的解决方案。

这是错误消息:

处理您的请求时出错。存储更新,插入或删除语句会影响意外的行数(0)。自实体加载后,实体可能已被修改或删除。有关理解和处理乐观并发异常的信息,请参阅http://go.microsoft.com/fwlink/?LinkId=472540

在编辑寄存器时,由于字段的使用导致在View中表示寄存器的主键。

可以通过输入主键的隐藏输入来解决。

@ Html.HiddenFieldFor(model =&gt; model.ID)

执行此操作,它将填充缺失的密钥,并且每件事情都能正常工作。

3 个答案:

答案 0 :(得分:0)

你的DataFormatString包含秒{0:hh:mm:ss}

Id也使用DateType,你可以避免使用正则表达式

这将适合您的需要

模型

    [Display(Name ="Horário de entrada")]
    [DataType(DataType.Time)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:hh\:mm}")]
    public TimeSpan? HorarioEntrada { get; set; }

或尝试此正则表达式

"((([0-1][0-9])|(2[0-3]))(:[0-5][0-9])(:[0-5][0-9])?)"

答案 1 :(得分:0)

您没有通过验证,因为正如您的问题所述......您输入的是18:00,即小时和分钟。

在您的模型中,您的字符串格式为hh:mm:ss,即小时,分钟和秒。因此,您的输入不会通过验证,因为18:00在几秒钟内缺少额外的:00

因此,您需要将输入更改为18:00:00以通过验证。

此外,对于24小时格式化,您需要HH:mm:ss

答案 2 :(得分:0)

我发现了这个问题。 当我通过数据注释指定输入字段类型时,不需要任何其他指令来验证RegexExpression或DisplayFormat等数据。 我的代码中的数据注释的Theese组合导致了所有问题。 通过删除它们,用户界面可以正常工作。 但如上所述,在将值从ViewModel传递到EntityModel以更新数据库上的数据时,更改输入类型会导致实体框架中出现错误。 但是,正如@Joshua Duxbury所说,这可能是另一个问题。 谢谢大家。