2012-03-30 42 views
6

我有一個模型類「Country」,其屬性「CultureId」未標記爲必需。另一個類「CountryViewModel」擁有相同的屬性「CultureId」。ASP.NET MVC爲非必填字段添加驗證

當呈現「創建」視圖時,我注意到驗證數據屬性被添加到「CultureId」文本框中,雖然沒有添加數據註釋。

我使用

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

什麼可能是這種行爲的原因是什麼?

感謝

回答

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; } 
} 

}

它可以幫助您設置驗證,而不在數據庫方面的模型。

+0

他的問題不在於如何設置屬性上的必需條件,而是如何避免他正在運行的不需要的html驗證。 此外,您的管理屬性的方式是典型的動態數據,而不是MVC通常工作的方式 – themarcuz 2012-03-30 08:41:40

+0

我認爲它將覆蓋驗證規則,如果元數據類將爲空 – 2012-03-30 09:08:47

12

我猜你的CultureId是一個int。 MVC自動將所需標記添加到不可爲空的值類型。

要關閉添加

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 

到的Application_Start或讓你的INT可空

+0

已經添加,並且仍然是相同的行爲。我會盡量使int爲空。謝謝 – Bill 2012-03-30 10:17:49

+1

很好的答案。它的作用是擺脫「數據需求」驗證,但由於Id是一個'int',它添加了'data-val-number',它在嘗試創建時仍然阻止表單提交。我可以通過設置默認值0來解決這個問題,但我不應該這麼做。 – eudaimos 2012-10-27 05:00:42

+0

我的不好 - 它的工作原理是驗證似乎跳過隱藏輸入的「data-val-number」 – eudaimos 2012-10-27 07:00:51

0

試試這個:

ModelState["CultureId"].Errors.Clear(); 

if (ModelState.IsValid)  
    { 
     ..... 
    } 

如果CultureId是整數,那麼它也會給你想要的結果...

+1

這是一個可以避免這裏涉及的真正問題的混合物。請參閱[從dskh獲取更多答案](http://stackoverflow.com/a/9941032/237838)。 – 2013-02-07 19:28:21

8

有幾種方法可以處理e這 -
a)。使財產爲可空對象如

public int? Age { get; set; } 

b)。在控制器類中使用以下內容 -

ModelState["Age"].Errors.Clear(); 

c)。添加到啓動 - DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;