加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC:在视图上访问ViewModel属性

发布时间:2020-12-16 06:37:48 所属栏目:asp.Net 来源:网络整理
导读:有没有办法从视图中访问ViewModel属性上的任何属性(无论是数据注释属性,验证属性还是自定义属性)?我想在其属性具有[Required]属性的字段旁边添加一些必需指示符之一. 例如,如果我的ViewModel看起来像这样: public class MyViewModel{ [Required] public in
有没有办法从视图中访问ViewModel属性上的任何属性(无论是数据注释属性,验证属性还是自定义属性)?我想在其属性具有[Required]属性的字段旁边添加一些必需指示符之一.

例如,如果我的ViewModel看起来像这样:

public class MyViewModel
{
    [Required]
    public int MyRequiredField { get; set; } 
}

我想在EditorFor模板中做一些事情,如下所示:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<int?>" %>

<div class="label-container">
    <%: Html.Label("") %>

    <% if (PROPERTY_HAS_REQUIRED_ATTRIBUTE) { %>
        <span class="required">*</span>
    <% } %>
</div>
<div class="field-container">
    <%: Html.TextBox("") %>
    <%: Html.ValidationMessage("") %>
</div>

解决方法

您要查找的信息位于ViewData.ModelMetadata中. Brad Wilson的 blog post series on Templates应该解释一切,特别是 ModelMetadata的帖子.

对于其他ValidationAttributes,您可以通过ModelMetadata.GetValidators()方法访问它们.

ModelMetadata.IsRequired将告诉你,如果一个复杂的类型(或值类型包裹在可空< T>)的由RequiredAttribute标签必需的,但它会给你误报对于不是空值类型(因为它们隐含地要求).您可以使用以下方法解决此问题:

bool isReallyRequired = metadata.IsRequired 
    && (!metadata.ModelType.IsValueType || metadata.IsNullableValueType);

注意:您需要使用!metadata.ModelType.IsValueType而不是model.IsComplexType,因为ModelMetadata.IsComplexType对于MVC返回false不认为是复杂类型,其中包括字符串.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读