避免多次触发Page_Load

在调试一个ASP.NET网站时,意外地发现,在login.aspx里,会两次触发Page_Load事件,在网上搜了下,找到原因:

在这个页面里,用一个<img src="#" />标识,用来显示验证码图片,在JavaScript的PageLoad事件里,重新为它的src赋于新的URL,而ASP.NET在页面加载时,发现src指向#,由于当前用户尚未通过验证,要尝试访问这个资源,必须重定向到登录页面,也就是login.aspx本身,所以触发了两次Page_Load。

解决办法是修改img标记为:<img src="xxxx/verifycode.aspx" />,而xxx/verifycode.aspx是个不需要身份验证就可以访问的资源,这样就不会两次触发Page_Load了。

#define MAX_GROUP 10 static page_group_t page_groups[MAX_GROUP]; static page_t* current_page = NULL; void lv_page_init(uint8_t group_id) { if ( group_id < 0 || group_id >= MAX_GROUP ) { return; } int count = page_groups[group_id].count; if ( count > 0 ) { for (size_t i = 0; i < count; i++) { page_t *page = page_groups[group_id].pages[i]; if (!page->inited && page->init) { page->init(page->obj); page->inited = true; } } } } void lv_page_register(uint8_t group_id, uint8_t page_id, void (*init)(lv_obj_t*), void (*exit)(lv_obj_t*), void (*update)(void), void (*reset)(void), void (*bind_common_widgets)(lv_obj_t*)) { if (group_id >= MAX_GROUP || page_groups[group_id].count >= MAX_PAGE_NUM) { return; } page_t* page = lv_malloc(sizeof(page_t)); if (!page) { return; } page->id = page_id; page->init = init; page->exit = exit; page->update = update; page->reset = reset; page->bind_common_widgets = bind_common_widgets; page->inited = false; page->obj = lv_create_screen_widgets(); page_groups[group_id].pages[page_id] = page; page_groups[group_id].count++; } void lv_page_switch(uint8_t group_id, uint8_t page_id) { if ( group_id < 0 || group_id >= MAX_GROUP ) { return; } if ( page_id < 0 || page_id >= page_groups[group_id].count ) { return; } page_t *page = page_groups[group_id].pages[page_id]; if ( current_page && current_page == page ) { return; } // 初始化 if (!page->inited && page->init) { page->init(page->obj); page->inited = true; } // 挂载共享控件 if (page->bind_common_widgets) { page->bind_common_widgets(page->obj); } // 加载页面 lv_screen_load_anim(page->obj, LV_SCR_LOAD_ANIM_NONE, 0, 0, false); // 退出旧页面 if (current_page && current_page->exit) { current_page->exit(current_page->obj); current_page->inited = false; current_page->obj = NULL; } else if ( current_page && current_page->reset ) { current_page->reset(); } current_page = page; } 上述是screen的切换操作,tile也是全部创建好然后通过下面的操作进行切换 static void switch_tile(int direction) { current_tile_index = current_tile_index + direction; if (current_tile_index >= 0 && current_tile_index < TILE_COUNT) { lv_tileview_set_tile_by_index(tileview, current_tile_index, 0, LV_ANIM_OFF); dot_indicator_set_active(&dot_indicator, current_tile_index); if( current_tile_index == 0 ) { lv_obj_add_flag(imgbtn_left, LV_OBJ_FLAG_HIDDEN); } else { lv_obj_remove_flag(imgbtn_left, LV_OBJ_FLAG_HIDDEN); } if (current_tile_index == TILE_COUNT - 1) { lv_obj_add_flag(imgbtn_right, LV_OBJ_FLAG_HIDDEN); } else { lv_obj_remove_flag(imgbtn_right, LV_OBJ_FLAG_HIDDEN); } } } static void btn_left_click_event_cb(lv_event_t * e) { // 获取事件代码 lv_event_code_t code = lv_event_get_code(e); if(code == LV_EVENT_CLICKED) { switch_tile(-1); } } static void btn_right_click_event_cb(lv_event_t * e) { // 获取事件代码 lv_event_code_t code = lv_event_get_code(e); if(code == LV_EVENT_CLICKED) { switch_tile(1); } }
07-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值