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

Bil*_*ill 6 jquery asp.net-mvc-3

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

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

我在用

@Html.HiddenFor(mode => mode.CultureId)
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Dan*_*Dan 12

我猜你的CultureId是一个int.MVC自动将所需标记添加到不可为空的值类型.

要关闭它添加

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 
Run Code Online (Sandbox Code Playgroud)

到Application_Start或使你的int可以为空


Div*_*ria 8

有几种方法可以解决这个问题 -
a).使属性像Nullable一样

public int? Age  { get; set; }
Run Code Online (Sandbox Code Playgroud)

B).在控制器类中使用以下 -

ModelState["Age"].Errors.Clear();
Run Code Online (Sandbox Code Playgroud)

C).添加到启动 - DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;


Era*_*gdu 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; }
}
Run Code Online (Sandbox Code Playgroud)

}

它可以帮助您在数据库端设置没有模型的验证。