【发布时间】:2009-03-01 00:16:27
【问题描述】:
我从事 C# 多年,但 ASP.NET 的时间不长,这让我很困惑。
在我的故障排除示例中,我在 ASP.NET 页面中有一个下拉列表,其中有四个项目,我有一个在 selectedindexchanged 上触发的服务器端事件,在这种情况下一切正常。
但是,如果(就像我在进化代码中所做的那样)我为“onchange”事件设置了一个 Javascript 处理程序,(它会启动一个警报)警报工作正常,但服务器端事件不再触发......我'确定我遗漏了一些明显的东西。
重要说明:Autopostback 在下拉列表控件上设置为 true,viewstate 启用,Javascript 事件处理程序返回 true
有人吗?
不是我必须手动连接__doPostBack 是吗?
非常感谢任何帮助。
编辑
好的,这里的代码首先是代码隐藏
using System;
using 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.Text;
namespace TestEvents
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void OnPreRender(EventArgs e)
{
ClientScriptManager csm = Page.ClientScript;
if (!csm.IsClientScriptBlockRegistered("NotesChangeScript"))
{
StringBuilder sb = new StringBuilder();
sb.Append("\r\n <script type=\"text/javascript\"> \r\n");
sb.Append(" //<![CDATA[ \r\n");
sb.Append(" var changesCount = 0; \r\n");
sb.Append(" function selection_handler()\r\n");
sb.Append("{ \r\n");
sb.Append(" changesCount += 1;\r\n");
sb.Append(" alert('i changed on the client!'); \r\n");
sb.Append(" return true; \r\n");
sb.Append(" } \r\n");
sb.Append(" function SetUpNotesHandler() \r\n");
sb.Append("{ \r\n");
sb.Append(" var ctrls = document.getElementsByTagName(\"SELECT\");\r\n");
sb.Append(" for(i=0;i<ctrls.length;i++)\r\n");
sb.Append(" {\r\n");
sb.Append(" ctrls[i].onchange = selection_handler; \r\n");
sb.Append(" }\r\n");
sb.Append("}\r\n");
sb.Append(" //]]> \r\n");
sb.Append("</script>");
csm.RegisterClientScriptBlock(this.GetType(), "NotesChangeScript", sb.ToString(), false);
StringBuilder initScript = new StringBuilder();
initScript.Append("<script type=\"text/javascript\" >\r\n");
initScript.Append(" //<![CDATA[\r\n");
initScript.Append(" SetUpNotesHandler(); \r\n");
initScript.Append(" //]]> \r\n");
initScript.Append("</script> \r\n");
csm.RegisterStartupScript(this.GetType(), "StartUpKey", initScript.ToString(),false);
base.OnPreRender(e);
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
Response.Write("i hit the server event");
}
}
}
这是页面的标记
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestEvents._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>problem</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem>Numero Uno</asp:ListItem>
<asp:ListItem>Numer Deux</asp:ListItem>
<asp:ListItem>Number Three</asp:ListItem>
<asp:ListItem>Nomina Quatros</asp:ListItem>
</asp:DropDownList>
<asp:HiddenField ID="hdnFieldChange" runat="server" />
</div>
</form>
</body>
</html>
【问题讨论】:
标签: c# asp.net javascript