2014-05-05 73 views
0

我已经简单的类代表型号为什么有些属性将isRequired设置为true?

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辅助渲染标签带班“必要”时,财产已必需属性

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

这是因为MaxGuests是一个原始类型,不允许null值。因此,它是必需的。

试试这个:

public long? MaxGuests { get; set; } 

?long后。这使它可以为空。

+0

@Victor:试试这个试试吗? –

+0

非常感谢这个解决方案。我们可以在不更改为可空类型的情况下执行此操作,只能通过检查现有的[必需的]属性? – BILL

+0

@Victor:不是我所知道的。 –

相关问题