1

我使用ASP.NET MVC 3 + FLUENT驗證+ NINJECT客戶端驗證屬性3

我有X型號和規則對於模型是什麼像這樣:

RuleFor(c => c.FirstName).NotEmpty(); 
RuleFor(c => c.LastName).NotEmpty(); 

我發現了一點奇怪的東西,發動機把所有的隱藏要素,並在下拉列表,單選按鈕等。驗證屬性,而且我也沒有針對該驗證配置中指定該模型,所以我想它是默認的...

<input type="hidden" value="1" name="Id" id="Id" data-val-required="&amp;#39;Id&amp;#39; must not be empty." data-val-number="The field Id must be a number." data-val="true"> 

由於隱藏元素總是有值,所以驗證是有效的,但是我對單選按鈕有問題。例如,如果我不想總是默認選擇一個單選按鈕,但是爲空,並且如果我想在該項目上放置驗證規則,則呈現會將默認驗證屬性和我的規則放在一起,這樣就會變得混亂並驗證不能正常工作...

任何人都有類似的問題或知道這個,或者我必須拉ASP.NET MVC的來源,並自己查找它? :)

半懶惰和小下推按期限編碼器

編輯

我試着提出從這個鏈接的解決方案:

流利的驗證。錯誤:在不顯眼的客戶端驗證規則驗證類型名稱必須在每個領域,無論AddImplicitRequiredAttribute設置所需屬性的唯一

但asp.net的MVC發出...

回答

6

讓您的視圖模型一個空整數的Id財產。

所以不是:

public int Id { get; set; } 

你應該使用:

public int? Id { get; set; } 

同代表你不希望需要的任何其他值類型真實。您應該使用可爲空的類型。

Html助手會自動爲所有非空類型自動發出data-val屬性,這是有意設計的,如果您不想要這種行爲,您必須編寫自己的自定義HTML助手來生成輸入字段和下拉列表。您不能再依賴TextBoxFor和DropDownListFor幫助器,因爲它們是如何設計的。

+0

哈哈哈,不錯......但我不想只改變我的viewmodels的聲明,無論如何我可以改變這種默認行爲? – Marko

+0

@Marko,不,你必須改變你的視圖模型。這也是有道理的,因爲如果不需要的話,你不應該使用'required'(值)類型來表示它。 –

+0

嗯,實際上是沒有意義的,因爲我不想改變我的視圖模型,以支持渲染驗證屬性的引擎......它是有道理的,我可以改變引擎的默認行爲,以獲得驗證屬性我想要和我想要怎樣... – Marko