3

这是情况。我有一些包含嵌套复杂模型类型的 ViewModel。这是其中一个模型的片段(这不是一个完整的类):

/// <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 的博客文章以及他所在领域的其他人,但到目前为止还没有运气。

4

1 回答 1

3

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

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

其中“联系人”是实例的名称

于 2011-03-21T02:46:35.137 回答