ASP.NET MVC客户端验证消息错误

3

有人能告诉我为什么显示“该字段是必需的”和“请插入数据库名称”,而非仅显示“请插入数据库名称”吗?

截图

这是我的模型:

public class InstallViewModel
    {
        [Required(AllowEmptyStrings = false, ErrorMessage = "Please insert database name")]
        public string DatabaseName { get; set; }

这是我的观点:
<div class="input-group">
    <span class="input-group-addon">Database</span>
    @Html.TextBoxFor(w => w.DatabaseName, new { @class = "form-control", placeholder = "Database name" })
</div>
@Html.ValidationMessageFor(w=> w.DatabaseName)

谢谢。

编辑:

您能看到附加的图片吗?我上传图片遇到一些问题。

该视图是部分视图,以下是整个部分视图:

@Html.ValidationMessageFor(w => w.DatabaseName)
    <div class="input-group">
        <span class="input-group-addon">Database</span>
        @Html.TextBoxFor(w => w.DatabaseName, new { @class = "form-control", placeholder = "Database name" })
    </div> 
    <br />
    @Html.CheckBoxFor(w => w.UseWindowsAuthentication, new { @checked = "checked" }) Use Windows Authentication<br /><br />
    <div class="wizard-sqlauth" style="display: none">
        <div class="input-group">
            <span class="input-group-addon">User name</span>
            @Html.TextBoxFor(w => w.UserName, new { @class = "form-control", placeholder = "User name" })
        </div>
        @Html.ValidationMessageFor(w => w.UserName)<br />
        <div class="input-group">
            <span class="input-group-addon">Password</span>
            @Html.PasswordFor(w => w.Password, new { @class = "form-control" })
        </div>
        @Html.ValidationMessageFor(w => w.Password)
    </div>

1
你之所以问这个问题,是因为你看到的是“此字段为必填项”,而不是“请插入数据库名称”,对吗?所有的答案似乎都忽略了这一点。 - Rui
是的,那正是我所询问的。 - Branislav B.
1
你能展示一下你的 View 的其余部分吗? - Simon Whitehead
我已经编辑了问题并包含了整个部分视图。 - Branislav B.
你真的在视图中使用 InstallViewModel 吗?也许你可以将 InstallModel 传递给局部视图。 - Krahu
没有安装模型。 - Branislav B.
4个回答

2

数据库名称是"必填项",而您的输入为空。(这里只有占位文本)


是的,问题在于显示了两条消息。一个是默认的,另一个是在ErrorMessage中定义的。 - Branislav B.

1
你是否在JavaScript中手动调用了jQuery验证,例如$('#myform').valid()
这将触发必填规则的默认值(“此字段为必填项”),并将其附加为标签在输入框之后,这正是您遇到的行为。
如果您确实需要同时使用(MVC的无障碍验证+jQuery验证),您可以配置jQuery验证忽略某些字段,例如。
$('#myform').validate({
  ignore: '#databasefieldId'
});

你能告诉我如何禁用默认值吗? - Branislav B.
@BranislavB。您可能只需要使用一种验证方法,为什么需要手动使用jQuery验证? - Rui
因为我的视图模型以向导的形式在多个部分视图中显示。我需要验证向导的每个页面,以便用户可以单击下一步按钮。因此,我需要在每个视图中的每个元素上调用验证。: function wizard_ValidateDataConnection() { var result = $('#wizard-step-database').validate().element('#DatabaseName') && $('#wizard-step-database').validate().element('#UserName') && $('#wizard-step-database').validate().element('#Password'); return result; } - Branislav B.
@BranislavB。那么我会尝试覆盖showErrors jQuery验证选项,即$('#myForm').validation({showErrors: function(){}});,使其不起作用。这样,您只会收到MVC Unobtrusive验证错误。我实际上从未尝试过这个,如果它有效,让我知道,我会更新答案。 - Rui
我已经添加了一个空的function() {}作为showErrors,现在它不显示任何内容。 - Branislav B.
@BranislavB。嗯,你可以尝试使用CSS隐藏jQuery验证添加的标签(参见此链接),或者将validate中的errorLabelContainer选项设置为不存在的元素(但这可能也会破坏mvc验证)。试试看吧。 - Rui

-1
您已经将 RequiredAttribute 属性应用于属性 DatabaseName,这意味着该属性必须包含一个值。
如果该属性为 null、空字符串("")或仅包含空格字符,则会引发验证异常。

1
问题不是关于看似错误的错误消息吗?OP将ErrorMessage设置为“请插入数据库名称”,为什么没有显示出来呢? - Rui

-2

您只需在 div 的顶部添加 @Html.ValidationMessageFor(w=> w.DatabaseName)。这将显示摘要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接