2012-10-11 64 views
9

我希望能夠啓動一些驗證功能,基於什麼控制器視圖被調用...我將在ViewState中設置一個變量或什麼,這將幫助我知道什麼控制器這個視圖被調用。有條件驗證在asp.net MVC4

換句話說,我想如果某個變量設置爲需要驗證......這是我如何使用MVC2辦時,我只是把jQuery的到我的代碼...

HospitalFinNumber: { 
        required: function (element) { 
         debugger; 
         return '@isFlagSet' != 'True'; 
        }, 
        minlength: 6, 
        remote: function() { 
         //debugger; 
         return { 
          url: '@Url.Action("ValidateHosFin", "EditEncounter")', 
          data: { hospitalFin: $('#HospitalFinNumber').val(), encflag: '@encflag' } 
         }; 
        } 
       } 

你看到我在那裏做什麼。只有在設置了某個變量時才需要此驗證...在這種情況下,變量爲FlagsSet ...然後設置最小長度並調用遠程函數以確保該值是唯一的。

我不想在所有情況下都這樣做。

從目前爲止我看過的所有文章,都沒有明確的方法使用unobrtusive ajax來完成這個任務嗎?我錯了嗎,有沒有辦法做到這一點?如果沒有,我如何才能將常規的舊jQuery驗證放入我的代碼中?

回答

11

ASP.NET MVC 3使用jquery unobtrusive驗證來執行客戶端驗證。所以,你既可以寫一個custom RequiredIf驗證屬性或使用Mvc Foolproof Validation提供的一個,然後:

public class MyViewModel 
{ 
    [RequiredIf("IsFlagSet", true)] 
    [Remote("ValidateHosFin", "EditEncounter")] 
    [MinLength(6)] 
    public string HospitalFinNumber { get; set; } 

    public bool IsFlagSet { get; set; } 

    public string EncFlag { get; set; } 
} 

然後所有剩下的是包括jquery.validate.jsjquery.validate.unobtrusive.js腳本或ASP.NET MVC 4使用相應的捆綁包括他們。

+0

嘿Darin。自從我收到你的消息後,我已經有一陣子了。但這聽起來像是要走的路。 – SoftwareSavant

+0

我必須在這裏補充一點,那就是Foolproof仍然沒有實體框架支持!如果您想知道爲什麼您在db.SaveChanges()上獲得「未實現的異常」你可能會覺得像我一樣,需要認識到這還沒有編碼......另請參閱:http://foolproof.codeplex.com/workitem/18457 – CodingYourLife

+1

@Darin Dimitrov它不適用於MVC 4 bcos它沒有調用RequiredIfVididator – CMMaung

3

通過Andy Westblog提出另一個解決方案是有條件從模型狀態在控制器刪除字段:

當窗體發佈,請從模型狀態的字段,以便他們不是驗證:

if (Request.IsAuthenticated) 
{ 
    ModelState.Remove("CommenterName"); 
    ModelState.Remove("Email"); 
} 

這對我有用。

+1

還不錯。這是晚了幾年,但我接受。 – SoftwareSavant

+1

這一切都很好,但Javascript驗證仍然會阻止表單發佈並永遠不會到達控制器。在我的情況下,如果註冊表中的國家是「美國」,那麼驗證Zip爲5或5 + 4格式。如果不是美國,則忽略對該字段的驗證。這看起來好像是常見的功能,沒有找到好的解決方案。除了控制器端驗證,還有一大堆JavaScript,它會刪除或添加驗證數據屬性,這是一種線索。 – stephenbayer