为啥我的验证消息没有显示?

Posted

技术标签:

【中文标题】为啥我的验证消息没有显示?【英文标题】:Why aren't my validation messages showing?为什么我的验证消息没有显示? 【发布时间】:2014-01-04 03:41:45 【问题描述】:

我有一个 mvc 5 站点,我正在尝试使用内置验证,但它不起作用。

“不工作”是指没有显示验证消息。我可以在 httppost 操作上测试模型并验证它是否有效。那部分工作得很好。但我认为在发布之前应该进行客户端验证。另外,如果不是,那错误信息不应该出现在帖子之后吗?

我错过了什么?我在下面粘贴了所有相关代码。

标记在元素中包含验证数据。

<div id="CommentDateDiv" style="display: none;">Comment Date:
    <br />
    <input data-val="true" data-val-required="The CommentDate field is required." id="CommentDate" name="CommentDate" style="width:150px" type="date" />
    <script>
        jQuery(function() 
            jQuery("#CommentDate").kendoDatePicker(
                "format": "M/d/yyyy",
                "min": new Date(2013, 11, 1, 0, 0, 0, 0),
                "max": new Date(2013, 11, 31, 0, 0, 0, 0)
            );
        );
    </script>
</div>
<div>Comment Details:
    <br />
    <textarea class="k-textbox" cols="20" data-val="true" data-val-required="The CommentDetails field is required." id="CommentDetails" name="CommentDetails" rows="2" style="width: 400px; height: 150px;"></textarea>
</div>

这是模型

public class CalendarCommentModel

    public string CommentType  get; set; 
    public string EventID  get; set; 
    [Required]
    public string CommentDate  get; set; 
    [Required]
    [DataType(DataType.Text)]
    public string CommentDetails  get; set; 

这是标记(使用剑道 ui)

@using (html.BeginForm())

    <div style="display: none;">
        <input type="radio" id="EventRadio" name="CommentType" value="event" checked="checked" /><label for="EventRadio">Attach to event</label>
        <input type="radio" id="LooseCommentRadio" name="CommentType" value="loose" /><label for="LooseCommentRadio">Free Comment</label>
    </div>
    <div id="EventSelectorDiv">
        Select Event:<br />
        @(Html.Kendo().DropDownListFor(x => x.EventID).DataTextField("Text")
          .DataValueField("Value")
          .BindTo(@ViewBag.AllEvents).OptionLabel("Select Event...").HtmlAttributes(new  style = "width: 400px;" ))

    </div>
    <div id="CommentDateDiv" style="display: none;">
        Comment Date:<br />
        @(Html.Kendo().DatePicker()
          .Name("CommentDate")
          .Min(Convert.ToDateTime(ViewBag.startDate))
          .Max(((DateTime)Convert.ToDateTime(ViewBag.endDate)).AddDays(-1))
          .HtmlAttributes(new  style = "width:150px" )
        )
    </div>
    <div>
        Comment Details:<br />
        @Html.TextAreaFor(x => x.CommentDetails, new  @class = "k-textbox", style = "width: 400px; height: 150px;" )

    </div>
    @(Html.Kendo().Button()
    .Name("SaveButton")
    .HtmlAttributes(new  type = "submit" )
      .Content("Save Comment"))

此外,相应的脚本也在添加中。

<script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>

【问题讨论】:

【参考方案1】:

您需要在表单中包含验证摘要或验证字段。 尝试添加任一

@Html.ValidationSummary()

它为您提供所有错误的摘要。

或者,如果您希望它用于单个模型属性,则在 commentdetails 之后添加类似的内容。

@Html.TextAreaFor(x => x.CommentDetails, new  @class = "k-textbox", style = "width: 400px; height: 150px;" )
@Html.ValidationMessageFor(model => model.CommentDetails)

【讨论】:

因为我不能两次投票给这个答案,所以我投票了 3 次。感谢您的帮助。

以上是关于为啥我的验证消息没有显示?的主要内容,如果未能解决你的问题,请参考以下文章

我的验证错误消息未显示(Javascript)

为啥 laravel 验证不显示错误

表单验证不显示消息

验证有效,但未显示消息

一次显示验证消息(验证摘要)而不是逐个jqgrid?

Angular 10 中未显示验证消息