我有一个模型类“Country”,其属性“CultureId”未标记为必需。另一个类“CountryViewModel”拥有相同的属性“CultureId”。ASP.NET MVC为非必填字段添加验证
当呈现“创建”视图时,我注意到验证数据属性被添加到“CultureId”文本框中,虽然没有添加数据注释。
我使用
@Html.HiddenFor(mode => mode.CultureId)
什么可能是这种行为的原因是什么?
感谢
我有一个模型类“Country”,其属性“CultureId”未标记为必需。另一个类“CountryViewModel”拥有相同的属性“CultureId”。ASP.NET MVC为非必填字段添加验证
当呈现“创建”视图时,我注意到验证数据属性被添加到“CultureId”文本框中,虽然没有添加数据注释。
我使用
@Html.HiddenFor(mode => mode.CultureId)
什么可能是这种行为的原因是什么?
感谢
如果你可以使用数据标注,你应该看看这个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; }
}
}
它可以帮助您设置验证,而不在数据库方面的模型。
我猜你的CultureId是一个int。 MVC自动将所需标记添加到不可为空的值类型。
要关闭添加
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
到的Application_Start或让你的INT可空
试试这个:
ModelState["CultureId"].Errors.Clear();
if (ModelState.IsValid)
{
.....
}
如果CultureId是整数,那么它也会给你想要的结果...
这是一个可以避免这里涉及的真正问题的混合物。请参阅[从dskh获取更多答案](http://stackoverflow.com/a/9941032/237838)。 – 2013-02-07 19:28:21
有几种方法可以处理e这 -
a)。使财产为可空对象如
public int? Age { get; set; }
b)。在控制器类中使用以下内容 -
ModelState["Age"].Errors.Clear();
c)。添加到启动 - DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
他的问题不在于如何设置属性上的必需条件,而是如何避免他正在运行的不需要的html验证。 此外,您的管理属性的方式是典型的动态数据,而不是MVC通常工作的方式 – themarcuz 2012-03-30 08:41:40
我认为它将覆盖验证规则,如果元数据类将为空 – 2012-03-30 09:08:47