首先
aspx页面,加截用户控件dylist.ascx
点击按钮,触发JS事件
用到的JS如下function del(Obj) {
alert('确定删除吗?这个操作不可逆!');
var d=new Date();
//提交删除请求的URL变量
var strURL="del.ashx?id="+Obj.id+"&d="+d.getTime();
xmlDom.Open("get",strURL,true); //XMLHTTP打开
xmlDom.onreadystatechange=function() //XMLHTTP状态改变时调用的事件
{
if(xmlDom.readyState==4)
if(xmlDom.status==200)
{
if(xmlDom.responseText!="") // //删除成功
{
document.getElementById("nav").innerHTML=xmlDom.responseText; //显示删除后的界面
}
else
alert("意外错误!请联系开发人员!");
}
else //出现错误
document.getElementById("loadingflag").innerHTML="向服务器请求数据时出现错误!";
}
xmlDom.Send(xmlDom);
document.getElementById("loadingflag").style.display=''; //显示加载的页面提示效果
}
JS提交到del.ashx,执行删除及加载用户控件,以下为主要代码 string id= context.Request.QueryString["id"].ToString();
string times = context.Request.QueryString["d"].ToString();
dds = a.TdataSet("delete from wap_dy where id='" + id + "' ");//dataset类
context.Response.Write(tool.RenderUserControl("~/admin/dylist.ascx"));//加载用户控件
下面执行到用户控件,以下为用户控件主要代码:
dylist.ascx<%@ Control Language="C#" AutoEventWireup="true" CodeFile="dylist.ascx.cs" Inherits="admin_dylist" %><%=str%><br /><%=page%>
dylist.ascx.csusing System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;public partial class admin_dylist : System.Web.UI.UserControl
{
db a = new db();
db b = new db();
DataSet dds = new DataSet();
DataSet ddsid = new DataSet();
public string str = "";
public string name;
public string page;
int bs = 20;
int pages;
protected void Page_Load(object sender, EventArgs e)
{
ddsid = a.TdataSet("SELECT * FROM [wap_dy] order by id desc");
if (ddsid.Tables["temp"].Rows.Count > 0)
{
int[] idarray = new int[ddsid.Tables["temp"].Rows.Count];
for (int k = 0; k < ddsid.Tables["temp"].Rows.Count; k++)
{
idarray[k] = Convert.ToInt32(ddsid.Tables["temp"].Rows[k].ItemArray[0]);//存储符合条件的ID
}
try
{
...
//内容过多,就不再粘贴了
我在网上看到有人说,ajax调用用户控件,不会执行Page_Load,是这样吗,请问如何解决?我现在调到的内容只有<br />,也就是跟网友所说一样,Page_Load没有执行
aspx页面,加截用户控件dylist.ascx
点击按钮,触发JS事件
用到的JS如下function del(Obj) {
alert('确定删除吗?这个操作不可逆!');
var d=new Date();
//提交删除请求的URL变量
var strURL="del.ashx?id="+Obj.id+"&d="+d.getTime();
xmlDom.Open("get",strURL,true); //XMLHTTP打开
xmlDom.onreadystatechange=function() //XMLHTTP状态改变时调用的事件
{
if(xmlDom.readyState==4)
if(xmlDom.status==200)
{
if(xmlDom.responseText!="") // //删除成功
{
document.getElementById("nav").innerHTML=xmlDom.responseText; //显示删除后的界面
}
else
alert("意外错误!请联系开发人员!");
}
else //出现错误
document.getElementById("loadingflag").innerHTML="向服务器请求数据时出现错误!";
}
xmlDom.Send(xmlDom);
document.getElementById("loadingflag").style.display=''; //显示加载的页面提示效果
}
JS提交到del.ashx,执行删除及加载用户控件,以下为主要代码 string id= context.Request.QueryString["id"].ToString();
string times = context.Request.QueryString["d"].ToString();
dds = a.TdataSet("delete from wap_dy where id='" + id + "' ");//dataset类
context.Response.Write(tool.RenderUserControl("~/admin/dylist.ascx"));//加载用户控件
下面执行到用户控件,以下为用户控件主要代码:
dylist.ascx<%@ Control Language="C#" AutoEventWireup="true" CodeFile="dylist.ascx.cs" Inherits="admin_dylist" %><%=str%><br /><%=page%>
dylist.ascx.csusing System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;public partial class admin_dylist : System.Web.UI.UserControl
{
db a = new db();
db b = new db();
DataSet dds = new DataSet();
DataSet ddsid = new DataSet();
public string str = "";
public string name;
public string page;
int bs = 20;
int pages;
protected void Page_Load(object sender, EventArgs e)
{
ddsid = a.TdataSet("SELECT * FROM [wap_dy] order by id desc");
if (ddsid.Tables["temp"].Rows.Count > 0)
{
int[] idarray = new int[ddsid.Tables["temp"].Rows.Count];
for (int k = 0; k < ddsid.Tables["temp"].Rows.Count; k++)
{
idarray[k] = Convert.ToInt32(ddsid.Tables["temp"].Rows[k].ItemArray[0]);//存储符合条件的ID
}
try
{
...
//内容过多,就不再粘贴了
我在网上看到有人说,ajax调用用户控件,不会执行Page_Load,是这样吗,请问如何解决?我现在调到的内容只有<br />,也就是跟网友所说一样,Page_Load没有执行
context.Response.Write(tool.RenderUserControl("~/admin/dylist.ascx"));//加载用户控件
这一步根本不会在前台处理,用xmlhttprequest前台的所有更改都必须用javascript处理,后台所做的针对控件的任何更改都不会反映到前台
你这个方法代码是怎么写的
{
StringBuilder sb = new StringBuilder();
System.IO.StringWriter sw = new System.IO.StringWriter(sb);//定义变量
HtmlTextWriter writer = new HtmlTextWriter(sw);
UserControl uc = new UserControl();
Control d = uc.LoadControl(UserControlName);
d.RenderControl(writer);
return sb.ToString();
}
以下将我的程序的大致流程做了个简易的流程示意图,请高手帮帮忙,谢谢,如果用户控件无后台代码运行,ajax程序运行非常正常,就是不能运行用户控件的后台代码,如果改为JS,请问如何写,高手能否给个示例?谢谢
附上图
需要注意的是 将.aspx 文件中的代码 删除 只保留 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Temp.aspx.cs" Inherits="ajax_xmlHttpRequest_Temp" %>这行 然后 在Temp.aspx.cs 中 重写 OnInit 方法 ,如下
protected override void OnInit(EventArgs e)
{
Control control = LoadControl("~/admin/dylist.ascx");
// or Control control = LoadControl("/dylist.ascx");
Controls.Add(control);
base.OnInit(e);
}
然后 修改del.ashx
将context.Response.Write(tool.RenderUserControl("~/admin/dylist.ascx"));//加载用户控件改成 context.Response.Redirect("~/admin/Temp.aspx");
第一、用你的方法,可以做到,是没问题的,
第二、但是有一点是,别人如果知道路径的话,可以访问到 ~/admin/Temp.aspx,一般情况下,我是不愿意出现这种结果
第三、是否还有别的方法来实现这种数据更新,可以考虑其他任何方法,即使连用户控件不会用到都可以
加分再求一种新方法,谢谢