ASP.NET MVC为非必填字段添加了验证

时间:2012-03-30 08:13:30

标签: jquery asp.net-mvc-3

我有一个模型类“Country”,其属性“CultureId”未标记为必需。另一个类“CountryViewModel”拥有相同的属性“CultureId”。

在渲染“创建”视图时,我注意到验证数据属性已添加到“CultureId”文本框中,尽管没有添加数据注释。

我正在使用

@Html.HiddenFor(mode => mode.CultureId)

这种行为可能是什么原因?

由于

4 个答案:

答案 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,那么它也会给你想要的结果......