一直以來ASP.NET的伺服器端與用戶端之間的指令碼調用困擾好久,到目前都無法實現理想的調用方法.規納總結一下.
1.ASP.NET伺服器端調用用戶端指令碼的方法.
<script language="javascript">
function bclick()
{
document.getElementById("div10").style.display='none';
}
</script>
調用方法:
Button1.Attributes.Add("onclick", "bclick()");
這種是postback,所以執行後的div10還是無法隱藏起來的.就這個問題一直困擾我很久,有高手的知道的話,可以指點我一下吧!非常感謝!
2.ASP.NET伺服器端調用用戶端指令碼的方法.
ScriptManager.RegisterStartupScript(this.Page, typeof(string), "addV", "document.getElementById('div10').style.display='none';", true);
附:
Page.RegisterStartupScript在Web表單的結尾處(在 </form> 標識之前)發送指令碼塊。
RegisterStartupScript() 用於添加要在載入頁面後啟動並執行指令碼塊,通過這種方法添加的指令碼塊位於 Web Form的結尾處,因為必須在指令碼運行前定義指令碼要修改的 HTML 元素。也就是說,如果您要使用用戶端指令碼將焦點設定到文字框,必須確保文字框的 HTML 標籤位於設定該文字框的焦點的指令碼之前
Page.RegisterClientScriptBlock方法:
用戶端指令碼剛好在Page對象的<form runat=”server”>元素的開始標誌後發出。
RegisterClientScriptBlock() 方法用於為響應用戶端事件而執行的指令碼代碼。通過此方法發送的指令碼塊位於 Web 頁面的開始處,因為這種方法不要求將指令碼塊置於所有 HTML 元素之後,即它一般不使用文檔內自訂的控制項
3.用戶端調用服務端方法.
a. 前台:<%# GetScore(Container.DataItem, "score")%>
後台:
public string GetScore(object container, string score)
{
string _score = DataBinder.GetPropertyValue(container, score).ToString();
int scoresum = Convert.ToInt32(_score) + 10;
return Convert.ToString(scoresum);
}
b.利用AjaxPro.Net,Atheme.net等Ajax架構處理.在用戶端調用伺服器端方法時,這些架構的確很方便.
4.利用Asp.net Ajax進行處理.其中的特效和功能的確讓處理不重新整理的效果很方便,提高效率.