0
我有雙列表框MVC。所選列表框中所有項目的Id都需要發佈到服務器上。型號有三個屬性定義在MVC中維護列表框的狀態
IEnumerable<SelectListItem> AvailItems {get;set;}
IEnumerable<SelectListItem> SelectedItems {get;set;}
string SelectedItemIds {get;set;}
我已填充availItems
和selectedItems
列表框有不同的名稱和SelectedItemIds
財產hiddenfield。如果用戶從列表框中添加/刪除項目,Javascript會更新隱藏字段。在httpost中,我只收到selectedItemIds
,因爲列表框的名稱已更改,這是預期的行爲。
問題是模型無效或發生任何異常時,返回View(model)
得到執行,列表框填充空值,但hiddenfield
包含修改項的值。當用戶再次提交頁面時,hiddenfield
的值會發布,但顯示的項目將來自數據庫。我遵循這種使用hiddenfield
的方法,而不是在提交之前選擇所有項目(使用javascript),因爲如果非js用戶提交頁面,它不會造成危害。 hiddenfield
的值會被拾取。
有關如何處理上述情況的任何想法?
是的,所以modelstate消失了,即用戶新添加/刪除的項目消失了。 – Sunny
您的意思是您在隱藏字段中選擇的ID未被考慮在內?您可以隨時解析其中的值並選擇$(document).ready()中的項目,或者在渲染視圖之前解析它的服務器端並調整SelectedItems,否? –
@Romeo,我有雙重列表,即一個列表框包含可用項目,當用戶選擇任何項目時,它們被推送到其他列表框2。提交時,需要保存listbox2中的所有項目(不僅僅是選定的項目)。隱藏字段包含listbox2項目的id,並且在添加/刪除項目時在客戶端上進行操作。現在,如果模型無效,則listbox2項目將從db和來自modelstate的隱藏字段中填充,即如果用戶將新項目5添加到現有項目2,3。隱藏字段包含2,3,5但顯示爲2,3。如果他重新提交該頁面,則2,3,5項目已發佈。希望我現在清楚。 – Sunny