问题描述
前台aspx代码:<headrunat="server"><title></title><scripttype="text/javascript">varaaa=true;functionclearBody(){if(aaa){document.body.innerHTML="";aaa=false;vara=document.getElementById("neirong");vard=document.createElement("input");d.type="button";d.id="button1";d.value="注册";d.runat="server";d.style.cursor="pointer";d.onclick=function(){location="?a=btnRegister_Click"}a.appendChild(d);}}</script></head><formid="form1"runat="server"><bodyid="neirong"style="height:289px"onclick="clearBody()">您好</body></form>后台cs代码:protectedvoidPage_Load(objectsender,EventArgse){if(Request.QueryString["a"]=="btnRegister_Click")btnRegister_Click();}protectedvoidbtnRegister_Click(){button1.value="登陆";}
解决方案
解决方案二:
用js生成的不是服务端控件,你可以在服务端buttonmyBT=newbutton();创建
解决方案三:
或者由客户端调用服务端方法,使用__doPostBack(ID,参数)
解决方案四:
ajax传过去就行了吧
解决方案五:
可以在后台创建动态ID
解决方案六:
你生成的,就不是一个服务器控件吧。使用ajax传递吧。或者后台动态生成服务器控件,但我还是推荐使用ajax
解决方案七:
你服务端是把按钮作为控件获取的,但是你的按钮控件却用js生成,这是不行的,asp.net的web控件无法用js在外部生成,其实也不是做不到,是很难,因为asp.net的web控件数据发送到服务端一定要以xml结构数据传送,你看着好像是html的一部分,其实是两部分,服务端解析页面后,你在本地浏览器查看网页源,里面好多xml结构数据呢,然后客户端点击按钮,按钮的数据会以xml结构发送给服务端,而这些步骤vsIDE里封装好的,并且隐藏掉了,只会以一个页面标签形势展现。换句话说,web控件在html里并不是一个html标签,而是一个服务端解析页面时用到的标签,而且这个标签可以自定义,自定义方法是重构system.web.page里面的Ihttphandler或者用.net内置的自定义标签方法。
解决方案八:
引用5楼hanjun0612的回复:
你生成的,就不是一个服务器控件吧。使用ajax传递吧。或者后台动态生成服务器控件,但我还是推荐使用ajax
请问怎么用
解决方案九:
引用3楼myhope88的回复:
ajax传过去就行了吧
请问ajax代码怎么写
解决方案十:
引用8楼lbj37的回复:
Quote: 引用3楼myhope88的回复:
ajax传过去就行了吧请问ajax代码怎么写
这个三五句话说不清,自己找书上网研究,asp.net是提交整个页面的数据和状态,__viewstate存储了状态信息(事件触犯等);ajax实现了局部提交,首先创建XMLHttpRequest对象,类似下面(少部分)if(!window.XMLHttpRequest){window.XMLHttpRequest=functionwindow$XMLHttpRequest(){varprogIDs=['Msxml2.XMLHTTP','Microsoft.XMLHTTP'];for(vari=0;i<progIDs.length;i++){try{varxmlHttp=newActiveXObject(progIDs[i]);returnxmlHttp;}catch(ex){}}returnnull;}}
……xmlHttp(“post”or“get”,url,trueorfalse)//建立和服务器的通讯,true表示异步通讯xmlHttp.onreadystatechange=回调方法;//类似委托里的invoke或beginInvokexmlHttp.send();//发送请求……xmlHttp.responseText//取回由服务器返回的信息大致这个过程,细节还很多,手工凭印象打的