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;
}
}