iT邦幫忙

1

使用 DBFirst 產生的模型欄位有些在前端會被檢查,有些不會

2022-12-25 01:48:21780 瀏覽
  • 分享至 

  • xImage

使用的框架是 WEB form 跟 ASP.net MVC

我在資料庫建立的資料表有些欄位的允許 null沒打勾,有些有打勾

然後用ADO.net的實體資料模型的「來自資料庫的 EF Designer」建立 edmx檔案跟其他.cs檔案,之後再用「新增 Scaffold 項目」建立「具有檢視,使用 Entity Framework 的 MVC 5 控制器」

以上都是使用自動產生的程式碼,沒去做任何修改

Web.config裡面有啟用ClientValidationEnabledUnobtrusiveJavaScriptEnabled,之後開啟Create.cshtml頁面,故意不輸入任何資料就送出,結果只有三個欄位有跳出xx欄位是必要項。的訊息

雖然這三個欄位的允許 Null都沒打勾,但其他允許 null也沒打勾的欄位卻沒被檢查,我去看edmx裡面那些沒被檢查的其他欄位屬性,有些欄位的可為 Null也都是設定成false沒錯,卻沒有在前端被檢查;看Create.cshtml的內容,也看不出除了欄位名稱不同以外,被檢查的欄位跟沒被檢查的欄位有什麼不同,而用來顯示驗證失敗訊息的jquery.validate.jsjquery.validate.unobtrusive.js的引用也沒跳出任何錯誤訊息

我看自動產生的資料表名稱.cs檔案裡面也都沒有[Required]的字樣,搜尋整個專案也找不到擁有這個關鍵字的檔案;自動產生的Create.cshtml裡面也沒有任何data-val的字樣,開頭的@model也是對應到正確的model,但最終在瀏覽器用F12檢查時那三個有被檢查的欄位卻有data-val="true"的屬性,其他可為 null設為false的該被檢查的欄位卻沒有這個data-val="true"屬性

想請教有什麼可能的原因會導致這種完全自動產生的程式碼,卻會有些欄位能在前端被檢查,有些卻不會呢?或是有什麼檢查方法能讓我找出這問題的根源出在哪邊嗎?

或是我直接改用透過資料庫使用 CodeFirst 產生的資料表.cs檔會比較好?想要使用強型別的話,應該沒必要堅持產生edmx檔?

johncoc iT邦新手 3 級 ‧ 2022-12-26 09:37:23 檢舉
可以改用dbcontext
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
科科
iT邦好手 8 級 ‧ 2022-12-26 12:09:58

Create.cshtml 貼上來看看?

我要發表回答

立即登入回答