读书人

ASP.NET 前台与靠山交互

发布时间: 2013-07-16 22:38:04 作者: rapoo

ASP.NET 前台与后台交互
Hi,dear all,向你们问一个问题:
在一个Home.aspx中有一个button,代码是

 <asp:Button  CssClass="logout" runat="server" Text="Logout" OnClick="LogoutBtn_Click" />

相应后台代码Home.aspx.cs是
public void LogoutBtn_Click(object sender, EventArgs e)
{
userLogin.AccountLogout(loginOutput, LogoutDone);
}

LogoutDone这个回调函数是
void LogoutDone(object sender, StatusEventArgs e)
{
ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript0", "<script>logoutCallback();</script>");
}


logoutCallback()是一个前台函数,我的问题是:进入回调函数LogoutDone时Page_Load函数已经退出了,此时页面已经返回了客户端,用ClientScript.RegisterStartupScript无法调用前台函数logoutCallback(),我怎样才可以在LogoutDone里调用前台函数logoutCallback()? ASP.NET 服务器 ASP.NET前台与后台交互
[解决办法]
我试了一下,如果直接在Button按钮的click事件中这样写:
         ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript0", "<script>logoutCallback();</script>");

然后在前台定义一个同名的Js函数是可以调用的,你可以把RegisterStartupScript这句直接放到Button的click事件处理程序中试试,看能不能成功调用
[解决办法]
asp.net本身处理各个消息请求就是异步多线程的,而用户定义的处理过程并不支持异步编程。如果一定要异步,你可以搜索有关“asp.net 异步”的文章(尽管它一般来说没有什么用)。

既然asp.net不支持异步,那么你就需要阻塞你的异步操作,去模拟同步操作。具体来说,类似于写
private ManualResetEvent mh;

public void LogoutBtn_Click(object sender, EventArgs e)
{
mh = new ManualResetEvent(false);
userLogin.AccountLogout(loginOutput, LogoutDone);


md.WaitOne();
}

void LogoutDone(object sender, StatusEventArgs e)
{
ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript0", "<script>logoutCallback();</script>");
mh.Set();
}


这样,保证在LogoutDone处理完毕之后才能让 LogoutBtn_Click 执行完毕。
[解决办法]
logoutCallback() 是js的方法吧? 与Page_Load函数无关吧??
[解决办法]
楼上的都说得很清楚了
[解决办法]
为什么要这么设计呢?

读书人网 >asp.net

热点推荐