在asp.net中服务器控件回送表单是通过调用__doPostBack函数来回送表单,触发事件的,先来看看__doPostBack函数:
function __doPostBack(eventTarget, eventArgument) {
if (theForm.onsubmit == null || theForm.onsubmit()) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
第一个参数是控件名称,第二个参数包含事件的额外信息.
这个使用例子中,含有一个hiddenfield隐含控件和的一个linkbutton控件,hiddenfield用于保存要存接收的值,linkbutton用于触发点击事件void lbtnDeleteDiscussion_Click(object sender, EventArgs e)
例:
****
<asp:hiddenfield id="hidfDiscussionId" runat="server" />
<asp:linkbutton id="lbtnDeleteDiscussion" runat="server" onclick="lbtnDeleteDiscussion_Click"></asp:linkbutton>
*******************
void lbtnDeleteDiscussion_Click(object sender, EventArgs e)
{
string[] roles = SiteSettings.Instance.ReviewAdminRoles.Split(',');
bool isDelete = false;
foreach (string role in roles)
{
if (HttpContext.Current.User.IsInRole(role))
{
isDelete = true;
break;
}
}
if (isDelete)
{
if (!string.IsNullOrEmpty(hidfDiscussionId.Value))
{
int discussionId = int.Parse(hidfDiscussionId.Value);
DiscussionManager.RemoveDiscussionItem(discussionId);
Response.Redirect(Request.RawUrl);
}
}
}
void Page_Load(object sender, EventArgs e)
{
....
sb.Remove(0, sb.Length);
sb.Append("function DeleteDiscussion(discussionId){");
sb.AppendFormat("confirm('{0}');", "确定要删除这条讨论吗?");
sb.AppendFormat("document.all('{0}').value = discussionId;", hidfDiscussionId.ClientID);
sb.AppendFormat("__doPostBack('{0}','');", lbtnDeleteDiscussion.ClientID.Replace('_', '$'));
sb.Append("}");
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "DeleteDiscussion", sb.ToString(), true);
}
****************
现在在客户端使用HTML代码也可以可以触发指定的服务器端事件并且传递一些值了.
如:
sb.AppendFormat("<a href=\"javascript:DeleteDiscussion('{0}');\">",item.DiscussionId);
sb.AppendFormat("<img src='{0}' alt='{1}' border='{2}' />",
CommerceContext.GetThemesImagePathForImgTag("Common/button_delete.gif"),
"删除讨论","0");
sb.Append("</a>");
这里使用html代码也以触发一个删除事件,把指定的项删除.
这个例子是我上一篇Blog的相关内容,给合Cilent CallBack可以实现无刷新地动态生成的html代码,并可以触发服务器端事件