为什么有些属性的isRequired设置为true?

时间:2014-05-05 11:42:43

标签: asp.net-mvc validation

我是表示模型

的简单类
public class Test{
        [Required]
        [DisplayName("Code")]
        [RegularExpression(@"^[0-9A-Za-z ]+$", ErrorMessageResourceType = typeof(ErrorMessages), ErrorMessageResourceName = "GeneralShowModel_Code_Error")]
        [MaxLength(25, ErrorMessageResourceType = typeof(ErrorMessages), ErrorMessageResourceName = "GeneralShowModel_Code_Length_Error")]
        public string Code { get; set; }

        [Range(0, Int16.MaxValue, ErrorMessageResourceType = typeof(ErrorMessages), ErrorMessageResourceName = "GeneralShowModel_MaxGuests_Error")]
        [DisplayName("Max guests")]
        public long MaxGuests { get; set; }

        [DisplayName("Pre-registration is closed")]
        public bool IsPreRegistrationClosed { get; set; }

        [DisplayName("In test mode")]
        public bool InTestMode { get; set; }
}

我创建了简单的自定义html助手,用于使用类' required'来渲染标签。当property具有Required属性

public static class CustomHelper
{
    public static MvcHtmlString RequiredLabelFor<T, TU>(this HtmlHelper<T> helper,
Expression<Func<T, TU>> expression)
    {
        var metaData = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
        var isRequired = metaData.IsRequired;
        var htmlFieldName = ExpressionHelper.GetExpressionText(expression);
        var label = new TagBuilder("label");
        label.SetInnerText(metaData.DisplayName);

        label.Attributes.Add("for", helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName));
        if (isRequired)
        {
            label.Attributes.Add("class", "required");
        }
        return MvcHtmlString.Create(label.ToString());
    }
}

我以这种方式使用这个助手

@Html.RequiredLabelFor(m => m.Code)

MaxGuests,IsPreRegistrationClosed等没有必需属性,但metaData.IsRequired为true。如何解决这个障碍?

1 个答案:

答案 0 :(得分:1)

这是因为MaxGuests是一种不允许null值的基本类型。因此,这是必需的。

试试这个:

public long? MaxGuests { get; set; }

?之后查看long。这使它可以为空。

相关问题