关于 前端页面 for (int i = 0; i < Model.DetailList.Count; i++) 遍历重复问题
按月份条件查询,
正常应该是上面两张图这样。(页面初始化的时候默认3月份,对应的是A员工,选择4月份的时候返回B员工),
可是我选择4月份,点击查询,页面显示还是A员工
这是什么原因导致的?
前端页面代码:
for迴圈中是否有對Model.DetailList增減項目?
什么意思,不太明白
@Yimi依米:
迴圈過程中如果列表數量增加或減少,就有可能導致錯誤的結果
@RosonJ: 没有增加减少,也出现这样的问题
@Yimi依米:
列表回傳到頁面前還做過哪些處理?
@RosonJ: 就return 列表 前端是for (int i = 0; i < Model.DetailList.Count; i++) 接收
@Yimi依米:
debug看看列表在什麼時間點開始資料錯誤吧
@RosonJ: 感觉就是显示的一瞬间
@Yimi依米:
幫我做個測試
<input type="textbox" value="@Model.DetailList[i].Usercode" />
<input type="textbox" value="@Model.DetailList[i].Username" />
把這兩行放到view上,看看顯示出來的結果
对呀,就是显示那一瞬间有问题
@RosonJ: 这两个input显示出来的是正常的。
我这个列表是可编辑的列表。如果用input的话怎么循环取值啊?
@RosonJ: 就是比如我有3条数据,改了其中每一条或者都改了。需要保存,后台要怎么获取到这个DetailList
@Yimi依米:
這是ModelState的問題
在Controller回傳Model之前加上一行
ModelState.Clear();
要注意的是,加上這行之後,如果你有使用ModelState,可能會出現異常
@RosonJ: 就是后台给DetailList赋值之前加上ModelState.Clear();这一行吗?
@Yimi依米:
加在return前最保險
@RosonJ: 数据是正常了,但是因为我的页面初始化的时候默认是上一个月,所以我选择4月的时候,数据对应上了,但是月份显示为3月了
@Yimi依米:
默認是在哪裡設定?
@RosonJ: 下拉框。
@Html.DropDownListFor(m => m.Month, ViewBag.Data12 as List<SelectListItem>, new { style = "width:100px" })
@Yimi依米:
m.Month在後端設定的?
@RosonJ: 是的,在后台设置的下拉框的值返回到前端页面。
@Yimi依米:
那就要回到基本問題了
傳入Model跟傳出的Model不建議用同一個
會有ModelState的問題,用上面寫的方式處理,又可能造成其他狀況
@RosonJ: 没有解决的办法吗?
@Yimi依米:
@RosonJ: 嗯嗯,我试试吧
条件筛选是由前端传参,后端返回决定的吧,看看后端返回的对不对吧
后端返回的没有问题
@Yimi依米: 选择四月后,得到的dataList列表,没有重新渲染,那就找找逻辑,看怎么没重新赋值 dataList
@一杯龙井胜拿铁: 后台返回的列表重新赋值了,连前端循环的时候都重新赋值了
页面这一块对应的代码贴出来看看
+1
问题中有
@Yimi依米: debug后端返回的值和前端的值是否一致,不一致看看有么有可能是缓存
@进阶科技树: 值是一致的,就是感觉显示的一瞬间有问题