【2020.04.03】asp.net core 3.1 枚舉類型模型綁定問題


問題:

   還是升級到3.1的問題,直接上圖,現象如下:

我們的系統里,有一些查詢條件是從枚舉轉化過來的,但是為了統一,界面渲染的時候追加了一個“請選擇”,value為-999,這種場景很多很多,

可以看到-999不在枚舉的定義里,只要我以當前選擇狀態提交請求,后端全局的modal valid就會報錯,說-999不是有效的值。

這個情況在我之前2.1里面不存在的,升級到3.1就這樣了。

 

調查:

  我同事也在看,居然在github里有人提過這樣的issue:https://github.com/dotnet/aspnetcore/issues/14824

 

官方說了,在3.1里面,不管這個參數了。

完了我們去看看3.1版本下,這個枚舉綁定器的源碼吧:https://github.com/dotnet/aspnetcore/blob/v3.1.2/src/Mvc/Mvc.Core/src/ModelBinding/Binders/EnumTypeModelBinder.cs

 

 仔細看他里面說的很清楚,不在枚舉的定義范圍內,綁定的值,全都無效的,方法會返回fasle,然后checkmodel就會爆error。此邏輯的初衷的確是好的,因為綁定更嚴謹了,新項目可以嘗試遵守下。

 

解決:

  1. 要么我改前端,但是想想還是算了,好多地方都用。

  2. 自己重寫一個,因為IsDefinedInEnum方法被它定義成私有的了,本想着可以擴展,想想還是重新寫了,代碼如下:

模型綁定三板斧-xxxModelBinder:

 

 模型綁定三板斧-xxxModelBinderProvider:

 

 模型綁定三板斧-替換:

 

 

 至此,就適配了這個問題

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM