[英]Sharepoint Custom WebPart Startup Script
好的,我遇到了一個已經解決了兩天的獨特問題。
我有System.Web.UI.WebControls.WebParts.WebPart控件,正在使用它構建自定義的Sharepoint視圖。 除了一個小問題,我幾乎想做的所有事情都在工作。 我需要使用Javascript來格式化日期和貨幣字段。 客戶希望DateTime字段為mm / dd / yyyy,並且貨幣在適當的地方帶有$和逗號。
在常規aspx頁面上的javascript中,這非常容易。 我只是寫了函數和頁面加載
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridFieldDAO dao = new GridFieldDAO();
myGrid.DataSource = dao.getItems();
myGrid.DataBind();
}
GetBuildFormattingScript();
}
private void GetBuildFormattingScript()
{
string script = "<script type=\"text/javascript\">";
script += " FormatByRows(\"" + myGrid.ClientID + "\",2);";
script += " FormatByRowsDate(\"" + myGrid.ClientID + "\",1);";
script += "</script>";
if(!ClientScript.IsClientScriptBlockRegistered("DoFormatting"))
ClientScript.RegisterStartupScript(typeof(string), "DoFormatting", script);
string script2 = " <script type=\"text/javascript\">"+
"var prm = Sys.WebForms.PageRequestManager.getInstance(); "+
"prm.add_beginRequest(BeginRequestHandler); "+
"prm.add_endRequest(EndRequestHandler); "+
"function BeginRequestHandler(sender, args) "+
"{ }"+
"function EndRequestHandler(sender, args) "+
"{ FormatByRows(\"" + myGrid.ClientID + "\",2); "+
" FormatByRowsDate(\""+myGrid.ClientID+"\",1);}</script> ";
if (!ClientScript.IsClientScriptBlockRegistered("DoUpdateFormatting"))
ClientScript.RegisterStartupScript(typeof(string), "DoUpdateFormatting", script2);
}
我的問題在於WebPart的OnLoad上我要更新的網格不存在...所以我必須將代碼添加到OnPreRender。
好吧,WebPArt加載並且Javascript不啟動...所以我單擊刷新它就啟動了。 誰能幫助我讓代碼在初始WebPart Load上運行? 有沒有人能夠讓服務器端腳本在SharePoint中以這種方式工作?
謝謝,邁克五世
為此,您可以利用_spBodyOnLoadFunctionNames
:
string script = "<script type=\"text/javascript\">";
script += " function FormatDataGridRows() {";
script += " FormatByRows(\"" + myGrid.ClientID + "\",2);";
script += " FormatByRowsDate(\"" + myGrid.ClientID + "\",1);";
script += " }";
script += " _spBodyOnLoadFunctionNames.push('FormatDataGridRows');";
script += "</script>";
編輯要測試,請將以下代碼放在頁面上的Content Editor Web部件中:
<script type="text/javascript">
function SayHello() {
alert('hello world!');
}
_spBodyOnLoadFunctionNames.push("SayHello");
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.