2011-09-24 99 views
2

我试图验证隐藏的整数属性,你可以请提出更好的办法隐藏INT属性验证

public class Model 
{ 
     [Display(Name="Theme"),Required(ErrorMessage="Please choose your theme")] 
     public int ThemeId { get; set; } 
} 

鉴于

@Html.Hidden(m=>m.ThemeId) 

而这种输出<input type="hidden" bbla bla value="0"/>

问题是目前该领域是有效的,因为0是int属性的默认值,所以属性中的每个必需项都是默认有效的。所以我必须使它无效。

我的解决办法是

只需用该属性Range(1,int.MaxValue)属性。

我只是要求知道这是否是这个问题的最佳解决方案。如果不是,你可以请点更好的解决方案。

回答

1

我遇到了同样的问题,并没有提出更好的解决方案。

这是完全有效的,因为你说的这个属性的范围是1..MaxInt

我能看到的唯一的其他解决方案是将其设置为一个可为空的整数,然后测试该值是否为空。但是,这将包括零值和负值,因此您仍然需要检查它是否为正整数。

1

有两个备选方案:

  • 使用Nullable属性(int?在这种情况下)
  • 使用string,使空字段

在这个场景中,首选的方法是使ViewModel中的属性为空,并将其标记为需要。

问题Should my viewmodel value type properties be nullable?也包含这两种方法的一些信息和意见。