具有不显眼的验证属性的ASP.NET MVC Razor引擎的奇怪行为

时间:2016-10-01 14:50:32

标签: asp.net .net asp.net-mvc razor unobtrusive-validation

我刚刚遇到了Razor引擎的一个非常奇怪的行为,即在表单中为输入添加不显眼的验证属性。在某些情况下,不会添加属性。

因此,我在同一页面上有两个类似的表单,具有相似的输入元素。必须将它们提交给不同的网址。 从模型方面来说,我有一些DataAnnotations属性,应用于属性以进行客户端验证。

这是我的ViewModel简化代码:

public class ApplicantPersonalInfo
    {
        [Required]
        [Display(Name = "First Name")]
        [StringLength(20, MinimumLength = 2)]
        [RegularExpression(@"^[ÀàÂâÆæÇçÉéÈèÊêËëÎîÏïÔôŒœÙùÛûÜüŸÿa-zA-Z \.‘'`-]+$", ErrorMessage = "First Name is in incorrect format")]
        public string FirstName { get; set; }
}

现在我要创建两个表单。对于他们中的每一个,动作url可以动态地不同(我使用jQuery Form Plugin中的ajaxSubmit提交它们),这就是为什么我决定不使用Html.BeginForm辅助方法,而是使用简单的<form>创建它们标签。所以我的代码是:

<form id="form1">
    @Html.TextBoxFor(m => Model.FirstName, new { id = "firstName1" })
</form>
<form id="form2">
    @Html.TextBoxFor(m => Model.FirstName, new { id = "firstName2" })
</form>

最有趣的是生成的HTML代码:

<form id="form1">
    <input data-val="true" data-val-length="The field First Name must be a string with a minimum length of 2 and a maximum length of 20." data-val-length-max="20" data-val-length-min="2" data-val-regex="First Name is in incorrect format" data-val-regex-pattern="^[ÀàÂâÆæÇçÉéÈèÊêËëÎîÏïÔôŒœÙùÛûÜüŸÿa-zA-Z \.‘&#39;`-]+$" data-val-required="The First Name field is required." id="firstName1" name="FirstName" type="text" value=""/>
</form>
<form id="form2">
    <input id="firstName2" name="FirstName" type="text" value=""/>
</form>

请参阅?所有这些验证属性都不适用于第二个输入! 但是如果使用Html.BeginForm生成表单,请执行以下操作:

@using (Html.BeginForm("NotExistingController", "NotExisitngAtion", FormMethod.Post, new { id = "form1" }))
{
    @Html.TextBoxFor(m => Model.HomeOwner.FirstName, new { id = "firstName1" })
}
<form id="form2">
    @Html.TextBoxFor(m => Model.HomeOwner.FirstName, new { id = "firstName2" })
</form>

生成的html代码在两个输入中都包含属性:

<form action="/NotExisitngAtion/NotExistingController" id="form1" method="post">
        <input data-val="true" data-val-length="The field First Name must be a string with a minimum length of 2 and a maximum length of 20." data-val-length-max="20" data-val-length-min="2" data-val-regex="First Name is in incorrect format" data-val-regex-pattern="^[ÀàÂâÆæÇçÉéÈèÊêËëÎîÏïÔôŒœÙùÛûÜüŸÿa-zA-Z \.‘&#39;`-]+$" data-val-required="The First Name field is required." id="firstName1" name="FirstName" type="text" value="" />
</form>
<form id="form2">
        <input data-val="true" data-val-length="The field First Name must be a string with a minimum length of 2 and a maximum length of 20." data-val-length-max="20" data-val-length-min="2" data-val-regex="First Name is in incorrect format" data-val-regex-pattern="^[ÀàÂâÆæÇçÉéÈèÊêËëÎîÏïÔôŒœÙùÛûÜüŸÿa-zA-Z \.‘&#39;`-]+$" data-val-required="The First Name field is required." id="firstName2" name="FirstName" type="text" value="" />
</form>

我对这种行为感到很困惑。我已经尝试过 - 您可以使用Html.BeginForm添加任意数量的表单 - 每个表单都有一组验证属性;但是如果你使用简单的<form>标签添加&gt; 1表单,则从第二个表单开始缺少属性。

所以我错过了什么,或者是Razor引擎中的错误?

0 个答案:

没有答案