2

我正在開發一個ASP.NET Core Web應用程序,我正在使用DataAnnotations來使用驗證屬性來裝飾我的視圖模型。當我用輸入打開一個詳細頁面時,我看到Core將HTML5驗證屬性添加到了呈現的HTML(即data-val =「true」)。如果我使用MVC驗證但發佈JSON對象,如何在客戶端上進行驗證?

不過,我寫了自定義客戶端的代碼,當用戶點擊保存按鈕這樣的:

$(document).on("click", "#SaveAsset", function (event) { 
     event.preventDefault(); 
     Asset.Save(); 
    }); 

我也有這樣定義的保存功能:

window.Asset.Save = function() { 

    var postData = { 
     'Id': $("#Id").val(), 
     'SerialNumber': $("#SerialNumber").val(), 
     'PartNumber': $("#PartNumber").val(), 
     'assetTypeId': $("#AssetTypeId").val() 
    }; 

    $.post('/Asset/SaveAsset', postData); 
} 

我需要在調用$ .post之前首先在客戶端進行驗證,但我對如何執行該操作感到困惑。微軟表示,當你使用窗體時,不顯眼的javascript會自動工作。但我沒有使用HTML表單元素來提交我的頁面。那麼如何觸發HTML5驗證屬性呢?

我添加了jquery.validate.js和jquery.validate.unobtrusive.js的鏈接。現在,如果我點擊保存按鈕,數據被髮送到服務器,控制器檢查ModelState。但它甚至不應該向服務器發送任何東西。客戶應該停止驗證。

我應該甚至停止這樣做嗎?例如,通過獲取每個輸入的val()來創建我的postData JSON對象。

我應該使用表單元素嗎?我停止使用它,因爲我的頁面有數百個輸入,所以我擔心我會遇到問題。這樣,我可以控制每個輸入。

+0

.NET核心沒有任何驗證可言,它只是一個運行時。 ASP.NET Core是webstack ... – Tseng

+0

而且,你應該使用表單。您可以攔截提交,並且只有在驗證成功後才從JavaScript調用它。但是,如果您有100個輸入字段,但只能通過/驗證4,那麼您應該重新考慮/重構您的設計 – Tseng

回答

1

使用JavaScript解決方案(如jQuery Validation Plugin)在發送到服務器之前驗證數據。否則,將數據發送到服務器,並在驗證失敗時返回錯誤請求的錯誤。

例如,

Return BadRequest(string[]{"Name is required", "Id must me a number"}); 

然後捕獲錯誤和鞋給用戶