.net core 枚舉類型綁定後UI問題

問題:

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

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

.net core 枚舉類型綁定後UI問題

.net core 枚舉類型綁定後UI問題

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

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

調查:

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

.net core 枚舉類型綁定後UI問題

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

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

.net core 枚舉類型綁定後UI問題

.net core 枚舉類型綁定後UI問題

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

解決:

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

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

模型綁定三板斧-xxxModelBinder:

.net core 枚舉類型綁定後UI問題

模型綁定三板斧-xxxModelBinderProvider:

.net core 枚舉類型綁定後UI問題

模型綁定三板斧-替換:

.net core 枚舉類型綁定後UI問題

.net core 枚舉類型綁定後UI問題

至此,就適配了這個問題


分享到:


相關文章: