使用__doPostBack函数回送表单.

使用__doPostBack函数回送表单.

在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代码,并可以触发服务器端事件

你可能感兴趣的:(使用__doPostBack函数回送表单.)