在编辑器模板中访问远程验证属性(MVC 5)

时间:2016-12-08 21:53:33

标签: c# asp.net-mvc validation

我有一个基本模型,我试图使用远程属性进行一些远程验证。

    [Remote("IsCodeValid", "Utilities", ErrorMessage = "Code already in use")]
    [Required]
    public string Code { get; set; }

如果我执行正常的Html.Editorfor(m => m.Code),那么一切正常,我能够成功使用远程验证。因此,正常用例中的属性和控制器方法运行良好。

问题

我尝试使用EditorTemplate,其中我使用第三方库重新创建输入控件。在EditorTemplate中,我需要访问远程验证属性,例如所有" data-val"属性,然后添加它们或如果有一些方法可用,我可以得到它们的列表,然后只需一次添加它们。

我已设法访问编辑器模板中的Html.ViewData。

有人能指出我正确的方向吗?有人做过这样的事吗?

这是我的编辑器模板的流程,因此它可以让您了解我想要实现的目标。

// Start of editor template
@model String

@{
var htmlAttributes = new Dictionary<string, object>();

// Observe how I can manually add attributes to the dictionary
htmlAttributes.Add("data-val", "true");

// Able to add Css class from ViewModel
if (Html.ViewData.ContainsKey("class"))
{
    var cssClass = Html.ViewData.SingleOrDefault(kvp => kvp.Key.ToLower() == "class");
    htmlAttributes.Add(cssClass.Key, cssClass.Value);
}
}
@(

// At this point is where I need to pass the htmlAttributes with the [Remote] validation values so that it can be added to the input control
Html.Custom3rdPartyLibrary()
    .TextEditorFor(x => Model)
    .HtmlAttributes(htmlAttributes)
    .Render()
)

1 个答案:

答案 0 :(得分:1)

您可以使用GetUnobtrusiveValidationAttributes()的{​​{1}}方法根据HtmlHelper获取验证属性。

ModelMetadata

根据应用于您的属性的验证属性,@model string @{ // Get the ModelMetadata ModelMetadata metadata = ViewContext.ViewData.ModelMetadata; // Get the validation attributes IDictionary<string, object> attributes = @Html.GetUnobtrusiveValidationAttributes(metadata.PropertyName, metadata ); } 将包含以下键/值对

attributes

然后您可以将任何其他属性(如类名)添加到字典中,并使用data-val-required: "The Code field is required." data-val-remote: "Code already in use" data-val-remote-url: "/Utilities/IsCodeValid" data-val-remote-additionalfields: "*.Code" data-val: true

将其传递给自定义帮助方法