我有一個模型類「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