C# MVC4中的Clinetside正则表达式验证

C# MVC4中的Clinetside正则表达式验证,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我有一个带有两个正则表达式的模型,其属性如下: 该视图是动态视图,我正在从jquery加载其内容,如下所示: 更新:我发现了问题,但没有找到解决方案。正则表达式客户端属性不会呈现,因为我正在使用[UIHint(“TextBox”)]添加一些自定义类和脚本。如果我删除UIHInt,所有验证属性都会生成,不会出现任何问题。如果我添加UIHInt,则不会生成任何内容 不确定我的UIHInt编辑器模板中有什么错误。请告知 EditorTemplate/TextBox.cshtml @Html.TextB

我有一个带有两个正则表达式的模型,其属性如下:

该视图是动态视图,我正在从jquery加载其内容,如下所示:

更新:我发现了问题,但没有找到解决方案。正则表达式客户端属性不会呈现,因为我正在使用[UIHint(“TextBox”)]添加一些自定义类和脚本。如果我删除UIHInt,所有验证属性都会生成,不会出现任何问题。如果我添加UIHInt,则不会生成任何内容

不确定我的UIHInt编辑器模板中有什么错误。请告知

EditorTemplate/TextBox.cshtml

@Html.TextBoxFor(m => Model, new {@class="txt"})
我的模型:

public partial class PartyRole
{
    [UIHint("TextBox")]
    [RegularExpression(@"^.{5,}$", ErrorMessage="Minimum 5 characters required")]
    [StringLength(50, ErrorMessage="Maximum {2} characters exceeded")]
    public string Title { get; set; }
}
jquery unobtrusive包含在我的捆绑包中,如下所示:

bundles.Add(new ScriptBundle("~/js/jqueryval").Include(
                    "~/Scripts/jquery.unobtrusive*",
                    "~/Scripts/jquery.validate*"));
视图:

@模型动态
@使用(Html.BeginForm(“Edit”,null,FormMethod.Post,new{id=“FrmIndex”}))
{
@Html.ValidationSummary(true);
@Html.EditorForModel()
}
$(“.datetime”).datetime();
$(“.combo”).combo();
$(“.chk”).chk();
变量形式=$(“#FrmIndex”)
.removeData(“validator”)/*由原始jquery.validate插件添加*/
.removeData(“不引人注目的验证”);/*由jquery unobtrusive插件添加*/
$.validator.unobtrusive.parse(表单);
但仍然没有在客户端生成验证。 正在从服务器端生成消息

更新:有一些突破。这些验证在我的强类型视图中运行良好。然而,在我的动态视图中,我并没有在这里展示


有人能告诉我这里做错了什么吗?

在您的自定义编辑器模板中,您应该诱使助手认为它在FormContext中,以便它在输入字段上发出HTML5 data-*属性,这些属性由不引人注目的验证使用。因此,在模板中输入以下内容,您就可以开始了:

@{
    this.ViewContext.FormContext = new FormContext();
}

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class="txt" })

您能显示视图的源代码吗?可能您没有在视图中显示验证消息,或者在App_Start/web.config.updated question with view中禁用了验证。我没有禁用web.config中的任何内容。您所说的“您没有在视图中显示验证消息”是什么意思?对于[Required]数据批注来说,不引人注目的验证很好。但是对于正则表达式,它显示的是来自服务器/的消息。谢谢,为什么要在视图末尾添加额外的JavaScript进行验证?我不确定这是否能解决问题,但请检查我的视图是否是动态的,它正在加载到jquery对话框中。因此,我需要像在动态视图中那样重新解析脚本。这适用于[Require]dataannotations,但不适用于[RegularExpressions]。
@{
    this.ViewContext.FormContext = new FormContext();
}

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class="txt" })