19

我使用在ASP.NET MVC客戶端驗證3.需要驗證只有在現場可見

類看起來[Required]屬性爲:

public class User 
{ 
    [Required(ErrorMessage = "First Name is required")] 
    public string FirstName { get; set; } 
} 

我希望FirstName只有在可見的情況下才會被驗證,只有在某些情況下才會顯示。我怎樣才能做到這一點?

我已經使用了以下內容,但仍然需要驗證該隱藏字段的必填字段。

$('#registerForm').validate({ ignore: ":not(:visible)" }); 
+0

我認爲,如果仔細觀察,您會發現在javascript中添加忽略指令會停止客戶端驗證。但是在帖子中,服務器端驗證會啓動並返回一個包含驗證消息的頁面。 – 2017-03-31 09:50:22

回答

13

從@Josiah的一些有用的提示,我能夠達到我的要求。

添加RequiredIfAttribute類和必需的javascript。請參閱Conditional Validation in ASP.NET MVC 3

而且在類中添加RequiredIf屬性爲:

public class User 
{ 
[RequiredIf("hFirstName", "true", ErrorMessage = "First Name is required")] 
public string FirstName { get; set; } 

,並在ASPX:

@Html.TextBoxFor(model => Model.FirstName, new { @style = "height:auto;" }) 
@Html.ValidationMessageFor(model => Model.FirstName) 
@Html.Hidden("hFirstName") 

設置的hFirstName爲「真」的值,如果名字字段是隱藏的, '假',如果可見。

這些變化帶來了神奇的效果。由於@Josiah Ruddell他answer

+0

這東西太棒了! Simon Ince現在有一個Mvc.ValidationTookit Alpha版本:http://blogs.msdn.com/b/simonince/archive/2011/09/29/mvc-validationtookit-alpha-release-conditional-validation-with-mvc- 3.aspx!它應該真的在GitHub倉庫IMO中。:) – 2012-04-30 05:32:49

+0

我終於得到了「RequiredIf」的工作,但我不得不改變一下代碼。 由於某種原因,它只在擴展RequiredAttribute而不是ValidationAttribute時有效,另一點需要指出的是客戶端的.addMethod需要在jQuery.ready()函數之外。 這是使用C#4.5,jQuery.validator 1.8.1 – Nick 2013-04-12 08:45:17

6

我會創造一個條件必需的屬性。有一篇關於用jQuery驗證創建一個好文章here

另一種選擇:您可以引用一個像Foolproof validation (codeplex)這樣的項目來提供此功能和客戶端腳本。

此外,您可以利用ajax加載您的部分視圖,以便它們在隱藏時從不在頁面上。這將完全避免條件驗證。

+0

是否有像RequiredIfVisible這樣的自定義屬性?在FoolProof中有像RequiredIf,RequiredIfNot,...這樣的屬性,我無法將它們用於我的需求。 – Prasad 2011-04-20 17:39:16

+0

不是我所知道的。但是您可以在隱藏字段上使用requiredif。無論是隱藏/顯示內容,只需更新隱藏字段。 – 2011-04-20 19:00:55

0

試試我的自定義validation attribute

[ConditionalRequired("hFirstName==true")] 
public string FirstName {get, set}; 

它支持多個條件。