0

很長一段時間,我認爲將ReadOnly屬性應用於viewmodel屬性意味着生成的元素將具有readonly HTML屬性。如何使誤導屬性[ReadOnly]生成只讀字段

然後我很dissapintd地發現,這個ReadOnly屬性只適用於模型綁定,並在一個只讀的輸入值不綁定到視圖模型發佈,人們仍然可以在UI字段中鍵入,讓他們認爲價值會被儲存起來。

現在,我必須瀏覽我的viewmodel,並且在有此屬性的地方,將其註釋掉,然後手動將HTML readonly屬性應用於受影響的Razor元素。

我現在想作一個ReallyReadOnly屬性,以便於對視圖模型的屬性標明,產生一個真正的只讀輸入,其價值必然會回發佈視圖模型

在那裏我可以,如果可以的話,在渲染過程中,我可以檢查並處理這個新屬性嗎?

+2

不是一件容易的事。您需要創建自己的'HtmlHelper'擴展方法來讀取屬性元數據('.IsReadOnly'值),並將readonly =「readonly」'屬性添加到它輸出的html中。 –

+3

這不是誤導。字面上有數百個屬性,其中大部分屬性不適用於模型,並且會被忽略。您有責任瞭解哪些屬性適用,哪些不適用。屬性可以用於很多目的,因此係統無法警告您這一點。 –

+0

@StephenMuecke這就是我的想法。一個新的助手擴展叫做例如'ReadOnlyInput',它讀取模型元數據並檢查新的屬性。由於似乎沒有其他選擇,爲什麼不讓您的評論成爲答案? – ProfK

回答

0

不幸的是,我所知道的絕對最簡單的解決方案是使用適用於您的模型的ReadOnly編輯器模板,類似於描述given here for dates

如果您還想將ReadOnly應用於模型綁定,但至少將它應用於完全相同的位置,則會出現重複。