当 Textboxfor 具有自定义名称时,ValidationMessageFor 不起作用

ValidationMessageFor not working when Textboxfor has custom name

我发现在我将 @Name 属性添加到 TextBoxFor 后我的 ValidationMessageFor 停止工作。这是有道理的,但我如何让 ValidationMessageFor 使用自定义名称属性。我需要维护自定义名称属性。

<div class="input-group margin-bottom-small">
    <span class="input-group-addon"><i class="fa fa-external-link-square fa-fw"></i>
    </span>
    @Html.TextBoxFor(model => model.SelectedContact.WebSiteInfoes[0].VanityURL, new { @class = "form-control", @placeholder = "Enter Vanity URL", @Name="VanityUrl" })
</div>
@Html.ValidationMessageFor(model => model.SelectedContact.WebSiteInfoes[0].VanityURL)

查看相关内容post

所以我做了一些更改并返回到修改后的 jquery.validate.js 问题是第二个值从未进入验证方法。

模型字段

[DisplayName("Vanity URL")]
[Remote("IsVanityURL_Available", "Validation", AdditionalFields = "ContactId")]
[RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed.")]
[Editable(true)]               
public string VanityURL { get; set; }

请求的 Fiddler 陷阱

方法中的参数

您可以将其附加到 @class:

@Html.TextBoxFor(
    model => model.SelectedContact.WebSiteInfoes[0].VanityURL,
    new { @class = "form-control VanityURL", placeholder = "Enter Vanity URL" })

var vanityUrl = $('.VanityURL').first();

那天晚上我脑子放了一个屁,质疑我为什么不使用局部视图来绕过复杂对象问题。我刚刚有机会回到该项目并对其进行测试,它可以完美运行,无需对 jquery.validate.js 或 jquery.validate.unobtrusive.js 进行任何更改。虽然它可能无法解决所有实现的这个问题,但它确实解决了我的问题。

您必须使用相应的 HTML 控制器 name.[=13] 的值更新 ValidationMessageFor 助手的 data-valmsg-for 属性=]

@Html.ValidationMessageFor(model => model.SelectedContact.WebSiteInfoes[0].VanityURL, 
null, new { data_valmsg_for = "VanityUrl" })