2010-07-26 85 views
0

好吧,我得到了一個我一直試圖解決的獨特問題兩天。Sharepoint自定義WebPart啓動腳本

我有System.Web.UI.WebControls.WebParts.WebPart控件我正在構建一個自定義Sharepoint視圖。我想要做的幾乎所有事情都在工作,除了一個小問題。我需要使用Javascript來格式化日期和貨幣字段。客戶希望日期時間字段爲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中以這種方式工作?

謝謝, 邁克V

回答

4

對於這一點,你可以採取的_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>"; 

編輯 要進行測試,把下面的代碼在你的頁面上的內容編輯器Web部件:

<script type="text/javascript"> 
function SayHello() { 
    alert('hello world!'); 
} 
_spBodyOnLoadFunctionNames.push("SayHello"); 
</script> 
+0

套件, 感謝您的輸入 - 我試過了 - 但似乎不工作......但這可能是因爲我在錯誤的時間/地點添加它。我會將此代碼添加到WebPart OnLoad或PreRender。我正在使用ScriptManager來註冊這個腳本 - 但沒有任何反應。 – MDV2000 2010-07-28 19:30:32

+0

OnLoad或PreRender應該都可以(因爲它只是被添加到控件集合中)。但是,腳本最終會在頁面上出現的位置很重要。 _spBodyOnLoadFunctionNames在/_layouts/1033/init.js中,所以你的調用需要在加載init.js之後才能完成。我添加了一些代碼,您可以在網頁上的內容編輯器中嘗試。試試看看你是否得到了Hello World警報。 – 2010-07-29 20:55:45

+0

這篇Technet文章可能會給你一些見解。 http://social.technet.microsoft.com/wiki/contents/articles/15790.all-about-sharepoint-javascript-function-spbodyonloadfunctionnames.aspx您可以使用setTimeout在腳本的開頭添加一個小延遲。 http://sharepointsolutions.blogspot.com/2007/07/adding-javascript-to-content-editor-web.html – MonkeyWrench 2013-05-03 23:47:15

相關問題