ASP.NET MVC 3中的Html.GetUnobtrusiveValidationAttributes和嵌套模型

3

以下是情况说明。我有一些包含嵌套复杂模型类型的ViewModels。这里是一个模型的片段(这不是完整的类):

/// <summary>
/// Defines the overall view when viewing contact details.
/// </summary>
public sealed class ContactDetailsViewModel : BaseViewModel
{
    public ContactDetailsViewModel() : base() { }
    public ContactDetailsViewModel(WebSession webSession) : base(webSession) { }
    public ContactDetailsViewModel(WebSession webSession, string returnUrl) : base(webSession, returnUrl) { }

    #region Contact
    /// <summary>
    /// The contact being viewed.
    /// </summary>
    public ContactModel Contact { get; set; }
    #endregion

以下是 ContactModel 类的一段代码片段(不完整):

    #region Company
    [Required(AllowEmptyStrings = false)]
    [StringLength(128)]
    public string Company { get; set; }
    #endregion

我的问题是,我需要能够获取嵌套模型类型ContactModel的验证属性,以进行客户端验证。在大多数视图中,我使用手动方法,因为我不使用*For()助手方法。这是我做的:

@Html.TextBox(
_titleField,
Model.Contact.Title,
new Dictionary<string,object>(Html.GetUnobtrusiveValidationAttributes("Company"))
{
    { "class", "CTextBox" },
    { "style", "width:100%;" }
})

这个方法很有效,当视图的模型是应用了“验证”属性的模型时,它会产生预期的验证属性。但是,当具有“验证”属性的模型位于嵌套模型对象中时,这种方法就不起作用了。我正在努力想出如何为此场景获取验证属性。视图很复杂,我无法将其分解为多个模型的多个视图,因此我需要使用嵌套模型使其正常工作。
我已经尝试了许多方法,但在试图获得未加工答案之前,我不会详细介绍它们。我会说我已经尝试过使用绑定前缀以及浏览一些静态的“ModelMetadata”类来深入我的嵌套模型结构,但到目前为止还没有成功。如果您能提供帮助,我将不胜感激。
请告诉我您需要什么其他信息,也许可以帮助我。
我还阅读了Brad Wilson和他的同行发表的许多博客文章,但到目前为止还没有找到解决方法。
1个回答

3

您必须提供属性的完整名称:

(Html.GetUnobtrusiveValidationAttributes("Contact.Company"))

其中“Contact”是实例的名称。


谢谢!我没有想到的一件事。哇,谢谢。 - user514005

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