参考文章:http://www.cnblogs.com/artech/archive/2007/04/06/702658.html
Part 1:
在新建页上拖出一个LinkButton控件,运行。在源文件中会出现__doPostBack函数。
对应的LinkButton被转化成HTML的a Tag。
<a id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">LinkButton</a>
如果在aspx.cs中定义了LinkButton的事件,点击此a Tag时事件将会被触发。
另:可以把链接文字去掉,做为隐藏的控件来利用。
Part 2:
如果把上述的asp:LinkButton换成asp:Button,运行后在源文件中会找不到__doPostBack函数。
对应的Button被转化成HTML的input Tag。
<input type="submit" name="Button1" value="Button" id="Button1" class="Button1" />
这种默认情况下Button将以submit的方式提交表单。
为asp:Button1加上UseSubmitBehavior="false"属性之后,源文件出现__doPostBack函数。Button被转化成:
<input type="button" name="Button1" value="Button" οnclick="javascript:__doPostBack('Button1','')" id="Button1" class="Button1" />
改变其表单提交的行为(type="button"),Button将通过调用javascript的方式(调用__doPostBack函数)提交表单。
Part 3:
为Button加上属性后,在客户端可以这样调用服务端事件:
<a href="#" οnclick="document.getElementById('Button1').click()">HTML a Tag</a>
<input type="button" name="Button2" id="Button2" value="Button2" οnclick="__doPostBack('Button1','')"/>
Part 4:
类似Button2的调用还可以包括参数:
<input type="button" name="Button3" id="Button3" value="Button3" οnclick="__doPostBack('Button1','btn3')"/>
在Button1_Click事件中加入:if (Request["__EVENTARGUMENT"] == "btn3") { //doSomething },用参数可区分出是哪个按钮触发事件。
Part 5:
联带笔记。多个Button共用一个函数方法:
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="1" OnCommand="MyPostBack">LinkButton</asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CommandName="2" OnCommand="MyPostBack">LinkButton</asp:LinkButton>
protected void MyPostBack(object sender, CommandEventArgs e)
{
Response.Write(((LinkButton)sender).ID + e.CommandName);
}
Part 6:
Asp.Net夜话之五:Page类和回调技术
参考文章:http://www.cnblogs.com/xiayang/articles/1428358.html
aspx:
<td>注册用户名:
<input type="text" size="10" maxlength="20" id="txtUserName" onblur="CallServerMethod(txtUserName.value,null)" />
<span id="message"></span>
</td>
<script type="text/javascript" language="javascript">
function Success(args, context)
{
message.innerText = args;
}
function Error(args, context)
{
message.innerText = '发生了异常';
}
</script>
aspx.cs(page继承ICallbackEventHandler接口):
string result = "";
public void RaiseCallbackEvent(String eventArgument)
{
if (eventArgument.ToLower().IndexOf("admin") != -1)
{
result = eventArgument + "不能作为用户名注册。";
}
else
{
result = eventArgument + "可以注册。";
}
}
public string GetCallbackResult()
{
return result;
}
public void Page_Load(Object sender, EventArgs e)
{
ClientScriptManager csm = Page.ClientScript;
//产生WebForm_DoCallback函数,Success和Error是JS的函数名
//reference = WebForm_DoCallback('__Page',argsName,Success,"",Error,false)
String reference = csm.GetCallbackEventReference(this, "argsName", "Success", "", "Error", false);
String callbackScript = "function CallServerMethod(argsName, context) {\n" + reference + ";\n }";
//RegisterClientScriptBlock输出后的位置会在<form>的下一行
//RegisterStartupScript输出后的位置会在</form>的上一行
csm.RegisterClientScriptBlock(this.GetType(), "KeyName", callbackScript, true);
}