我有一个模型类“Country”,其属性“CultureId”未标记为必需。另一个类“CountryViewModel”拥有相同的属性“CultureId”。
在渲染“创建”视图时,我注意到验证数据属性已添加到“CultureId”文本框中,尽管没有添加数据注释。
我正在使用
@Html.HiddenFor(mode => mode.CultureId)
这种行为可能是什么原因?
由于
答案 0 :(得分:12)
我猜你的CultureId是一个int。 MVC会自动将必需的标记添加到不可为空的值类型中。
要关闭此功能,请添加
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
到Application_Start或使你的可以为空的
答案 1 :(得分:8)
有几种方法可以解决这个问题 -
一个)。将属性设为Nullable,如
public int? Age { get; set; }
B)。在控制器类中使用以下 -
ModelState["Age"].Errors.Clear();
C)。添加到启动 - DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
答案 2 :(得分:0)
如果您可以使用数据注释,则应查看此http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute.aspx
namespace MvcApplication1.Models
{
[MetadataType(typeof(MovieMetaData))]
public partial class Movie
{
}
public class MovieMetaData
{
[Required]
public object Title { get; set; }
[Required]
[StringLength(5)]
public object Director { get; set; }
[DisplayName("Date Released")]
[Required]
public object DateReleased { get; set; }
}
}
它可以帮助您在数据库端没有模型的情况下设置验证。
答案 3 :(得分:0)
试试这个:
ModelState["CultureId"].Errors.Clear();
if (ModelState.IsValid)
{
.....
}
如果CultureId是int,那么它也会给你想要的结果......