C# 如何使用客户端验证显示验证摘要?

C# 如何使用客户端验证显示验证摘要?,c#,validation,asp.net-mvc-4,C#,Validation,Asp.net Mvc 4,我有这个模型: namespace CameraWebApp.Models { public class Images { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int ImageId { get; set; } [Required(ErrorMessage="Please enter your first name")]

我有这个模型:

namespace CameraWebApp.Models
{
    public class Images
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ImageId { get; set; }
        [Required(ErrorMessage="Please enter your first name")]
        public string SubmitterFirstName { get; set; }
        [Required(ErrorMessage = "Please enter your surname name")]
        public string SubmitterLastName { get; set; }
        [ExistingFileName]
        public string NameOfImage { get; set; }
        [StringLength(140, ErrorMessage="Please reduce the length of your description to below 140 characters")]
        [DataType(DataType.MultilineText)]
        public string DescriptionOfImage { get; set; }
        public string ImagePath { get; set; }
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public DateTime DateAdded { get; set; }
    }
}
每个属性上面都有一些数据批注,我使用这些批注来验证服务器端并在验证摘要中显示错误消息,我的视图如下所示:

@model CameraWebApp.Models.Images
说明书
  • 上图:来自计算机摄像头的实时视频流
  • 按下“照相机按钮”(红色右侧),直到您对拍摄的照片满意为止
  • 将“大文本字符串”复制并粘贴到浏览器的地址栏中
  • 你看到了什么
  • 您可以为这个UI设想哪些应用程序
@Html.ValidationSummary(false) @使用(Html.BeginForm()) { @Html.ValidationSummary(true) base64图像: 名字 @EditorFor(model=>model.SubmitterFirstName) 姓 @EditorFor(model=>model.SubmitterLastName) 图像名称 @EditorFor(model=>model.NameOfImage) 图像描述 @EditorFor(model=>model.DescriptionOfImage) } @ActionLink(“gfd!!”,“DisplayLatest”);
上面的代码显示的错误消息很好,我的问题是我试图开始添加客户端验证,并将以下代码添加到我的_布局中:



从查看源代码可以看出,它实际上在客户端进行验证,但不显示任何错误消息?有人知道A:为什么它不再显示我的错误消息了?B:在验证客户端时,如何在验证摘要中显示错误消息

您必须为所有属性使用
@Html.ValidationFor(model=>model.YourProperty)
您必须为所有属性使用
@Html.ValidationFor(model=>model.YourProperty)
页面上有两个验证摘要,一个在表单外,一个在表单内。客户端验证只会写入表单中的摘要容器(不确定这是故意还是疏忽)

表单中的参数用于排除属性级错误(参数
true
仅显示模型范围内的错误)

现在,
ValidationSummary
helper在生成HTML时执行此操作(源代码修改为适合stackoverflow宽度):

excludePropertyErrors
是您设置为
true
的值。如果在返回HTML时ModelState上没有错误,并且您已经告诉它排除属性错误,它将不会输出验证摘要容器(
returnnull
)-因为客户端验证只处理属性错误,并且您已经告诉它您不想要这些错误

简言之,有两个问题:

  • 客户端验证不会在表单外使用验证摘要
  • 只有当服务器上已经存在验证错误时,才会输出表单中的验证摘要

页面上有两个验证摘要-一个在表单外,一个在表单内。客户端验证只会写入表单中的摘要容器(不确定这是故意还是疏忽)

表单中的参数用于排除属性级错误(参数
true
仅显示模型范围内的错误)

现在,
ValidationSummary
helper在生成HTML时执行此操作(源代码修改为适合stackoverflow宽度):

excludePropertyErrors
是您设置为
true
的值。如果在返回HTML时ModelState上没有错误,并且您已经告诉它排除属性错误,它将不会输出验证摘要容器(
returnnull
)-因为客户端验证只处理属性错误,并且您已经告诉它您不想要这些错误

简言之,有两个问题:

  • 客户端验证不会在表单外使用验证摘要
  • 只有当服务器上已经存在验证错误时,才会输出表单中的验证摘要
if (htmlHelper.ViewData.ModelState.IsValid)
{
    // [snip]

    // TODO: This isn't really about unobtrusive; can we fix up 
    // non-unobtrusive to get rid of this, too?
    if (htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled 
        && excludePropertyErrors)
    {
       // No client-side updates
       return null;
    }
}