我的意思如下:
我想根据用户的要求Response.Write一段HTML代码。。但是在这段代码里包含一个按钮(也可能没有)
我如何让这段Response到客户端的按钮响应一个我在服务器端已经定义好的事件??
我想根据用户的要求Response.Write一段HTML代码。。但是在这段代码里包含一个按钮(也可能没有)
我如何让这段Response到客户端的按钮响应一个我在服务器端已经定义好的事件??
解决方案 »
- 崩溃的查询问题 出现 �
- 外包项目:有个Wap开发的小软件,有意思的看过来
- 再次发问,本以为解决了,可还是不行.
- ajax autocomplete 问题。
- javascript和c#操作同一个<select></select>时的问题,请帮忙
- 把自己做好的asp.net页面上传到远程主机不能访问,求解!求救!
- 请问在ASP.NET中,能否将一个asp.net的页面全部转换成web用户控件,方便别的程序执行
- 关于.net的表格问题,请高手指教!!!
- 请高手帮忙!如何在tabstrip子页面中调用父页面方法
- 请教关于2个listbox之间数据互相传递的问题,要使用js
- 求教:DataSet.GetXml()怎样保留NULL值的列?
- 请问这个问题一般有哪些解决方法呢??
bt.Click += new EventHandler(bt_Click);
{
//动态产生或装载控件
//也许需要连接控件事件处理函数
//加到父控件的Controls
}里生成或装载了动态控件。当控件在客户端触发,postback到服务器端时,IsPostBack==true,这些控件没有被重新生成,怎么能触发事件?所以答案是,当你需要动态生成或装载控件时,应该在if (!IsPostBack)之外做。我问为什么想在if (!IsPostBack)之内做呢?回答是想只生成一次,跟在ASPX页面里一样<form id="form1" runat=server>
<asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>#%&%#&%^#&,你怎么会认为这个控件只生成一次呢?这些玩意也不是魔术,想生成一个Button对象,你需要用Button btn = new Button();需要触发它的Click事件,你需要用btn.Click += new EventHandler(YourHandler);即使象包含<asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>的页面,它也是被转化成C#或VB文件,编译成assembly,然后再被执行的啊不信?加一个页面,TestControls.aspx:<%@ Page Debug="true" %>
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.SqlClient"%><form id="form1" runat=server>
<asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>
<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="false" GridLines="Both">
<Columns>
<asp:TemplateColumn HeaderText="Name">
<ItemTemplate><%# DataBinder.Eval(Container.DataItem,"Name")%></ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</form>
<script language="C#" runat="server">
void Button_Click(Object sender, EventArgs e)
{
Button btn = (Button)sender;
Response.Write(btn.Text + " is clicked<BR>");
}void Page_Load(Object sender, EventArgs e)
{
Button btn = new Button();
btn.ID = "Button2";
btn.Text = "Button2";
btn.Click += new EventHandler(Button_Click);
form1.Controls.Add(btn);
if (!IsPostBack)
{
SqlDataAdapter da = new SqlDataAdapter("select Name=au_fname + ' ' + au_lname from authors", "server=localhost;database=pubs;uid=sa;pwd=;");
DataTable dt = new DataTable();
da.Fill(dt);
DataGrid1.DataSource = dt.DefaultView;
DataGrid1.DataBind();
}
//}//这是故意的</script>把最后一个“}”注释掉
这个按钮的位置是根据用户的一段html代码决定的比如
<div>button<div>然后我就要在button这个位置生成这个可以响应服务器事件的按钮
大家有没有遇到过这种问题?我想了好长时间也想不出来。。如果response.write一个input则因为是客户端生成的,没有办法响应服务器事件
<tr>
<td>
<p>按钮位置</p>
</td>
</tr>
</table>
比如我根据用户要求,生成了这段html,我要在“按妞位置”这里生成一个按纽并添加一个服务器端的事件
1、动态生成按钮,并给控件加事件,但是这种情况,当PostBack后按钮就消失了,其原因是服务器没有存这个控件的状态,也就是LoadViewState时没有它,那么我们需要重载一下LoadViewState事件,在这个事件中再添加这个控件就可以了。也就是 if (!Page.IsPostBack){动态添加控件,添加事件} ,Override LoadViewState(){再加这个控件和事件}
2、另外一种方法,就是页面上放一个隐藏的服务器控件,不如一个TextBox,把它的宽度设为0(如果设Visible = false,那么服务器端不生成其Html,无法通过脚本控制它),PostBack属性设true,对这个TextBox写后台的onchange代码,你Response 出一个客户端按钮,对这个按钮的onclick写_doPostBack(服务器端TextBox,onchange)就可以了.