您现在的位置是:百科 >>正文
web如何通过一般处理程序修改控件信息
百科2337人已围观
简介把WebForms里的控件数据从浏览器端送回服务器,再让服务器改完控件状态返回页面——这套流程绕不开一般处理程序.ashx)。它不像.aspx那样带着完整的页面生命周期,没有ViewState,没有服 ...
把WebForms里的通过控件数据从浏览器端送回服务器,再让服务器改完控件状态返回页面——这套流程绕不开一般处理程序(.ashx)。般处它不像.aspx那样带着完整的理程页面生命周期,没有ViewState,序修息没有服务端控件树,改控所以你不能在.ashx里直接写Label1.Text = "abc",通过那个Label对象根本不存在。般处但恰恰因为轻,理程它适合干一件事:接收请求、序修息处理数据、改控把结果回吐给前端,通过由前端脚本去改控件。般处
我见过不少人第一反应是理程:那我用Session把控件值存起来不就行了?行,但那是序修息绕路。更直接的改控做法是让.ashx返回JSON或纯文本,前端拿到后用JavaScript操作DOM。举个例子,页面上有个<asp:TextBox ID="txtName" runat="server"></asp:TextBox>,渲染到浏览器后变成<input name="txtName" id="txtName" type="text">。你写一个ChangeHandler.ashx,里面context.Response.ContentType = "text/plain",然后context.Response.Write("新值")。前端用fetch('ChangeHandler.ashx')拿到这个字符串,再document.getElementById('txtName').value = result。控件在视觉上就变了,服务器端下次回发时也会拿到这个新值,因为input的value已经改了。
这里有个容易踩的坑:runat="server"的控件ID在浏览器里不一定就是你在.aspx里写的那个ID。如果控件放在ContentPlaceHolder或者GridView模板里,实际生成的ID会带一堆前缀,比如ctl00_ContentPlaceHolder1_txtName。用ClientID属性在服务端拼出真实ID,或者用ClientIDMode="Static"强制固定。我倾向于后者,简单粗暴,前提是页面上没有重复ID。
再往深一层,如果你要改的不是单个输入框,而是一个下拉列表的选项呢?.ashx可以返回一段JSON数组,前端遍历后动态创建<option>节点塞进<select>。或者更省事——直接返回拼好的HTML片段,用innerHTML替换掉整个<select>的内容。但要注意,<asp:DropDownList>渲染出来的<select>如果带了runat="server",它的选项在服务器端是有对应ListItem对象的。你前端改了option,服务器端回发时并不会自动同步这些ListItem——除非你重新绑定数据源。所以这种改法只适合纯前端展示,或者你打算在回发时用Request.Form自己解析。
还有一种场景:你想让.ashx直接改服务器端某个控件的属性,然后让页面刷新时体现出来。这需要把控件状态存到Session、Cache或数据库里,.ashx改完存储,页面重新加载时在Page_Load里读出来再赋给控件。比如Session["LabelText"] = "已更新",然后页面上Label1.Text = Session["LabelText"] as string。这中间隔了一层,但逻辑清晰,不会出现“控件对象不存在”的尴尬。
实际项目里我更喜欢用.ashx + 前端DOM操作的组合。服务器端只负责数据逻辑,控件长什么样、显示什么值,交给浏览器去渲染。这样.ashx的代码干净,没有页面生命周期干扰,调试也快——打开浏览器开发者工具,看Network里.ashx的响应,再看Elements里控件的变化,一清二楚。唯一要留心的是编码问题:context.Response.ContentEncoding = Encoding.UTF8,不然中文返回去就是乱码。这个坑我踩过至少三次,每次都是因为新建.ashx时忘了改默认的context.Response.ContentType = "text/plain"那行下面的编码设置。
所以别把.ashx当成“轻量级页面”来用,它就是个HTTP端点。控件信息的修改,本质上是你通过HTTP响应把新数据传给浏览器,浏览器再更新DOM。服务器端控件对象在.ashx执行时并不存在,想清楚这一点,代码就不会写歪。
Tags:
上一篇:渗透俄罗斯版在线观看
下一篇:免费seo推广软件
相关文章
伪装邮箱发邮件
百科我花了三个小时,终于让一封看似来自老板的邮件躺进了同事的收件箱。不是破解密码,不是入侵服务器,只是用了SMTP协议里一个几乎没人检查的字段——发件人显示名。你可以在任何邮箱设置里把“发件人姓名”改成“ ...
【百科】
阅读更多沈阳安全阀检测机构
百科沈阳铁西区兴华街那栋灰扑扑的写字楼里,三楼走廊尽头挂着块白底黑字的牌子——沈阳特种设备检测研究院安全阀校验站。要不是门口堆着几只锈迹斑斑的阀门,路过的人大概率会以为这是家会计事务所。 我上周亲眼看见一 ...
【百科】
阅读更多vivo手机官网刷机
百科vivo手机官网的刷机入口藏得不算深,但第一次找的人多半会懵。你打开官网,翻到“服务”那一栏,点开“手机升级”,看到的不是刷机包,而是一堆“检测更新”“售后网点”的链接。真正能下载固件的地方,其实在页 ...
【百科】
阅读更多