2010-07-26 6 views
0

Bon, j'ai eu un problème unique que j'ai essayé de résoudre pendant deux jours.Script de démarrage WebPart personnalisé Sharepoint

J'ai le contrôle System.Web.UI.WebControls.WebParts.WebPart Je construis une vue Sharepoint personnalisée avec. Presque tout ce que je veux faire est de travailler sauf un petit problème. J'ai besoin d'utiliser Javascript pour mettre en forme les champs Date et Devise. Le client souhaite que les champs DateTime soient mm/jj/aaaa et que la devise ait $ et des virgules, le cas échéant.

Ceci est assez facile en javascript sur une page aspx régulière. Je viens d'écrire les fonctions et à la page charge

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); 
} 

Ma question en ce que la OnLoad du réseau que je webpart suis désireux de mise à jour n'existe pas ... donc je dois ajouter du code à OnPreRender.

Eh bien, le WebPArt se charge et le Javascript ne se déclenche pas ... donc je clique sur refresh et il se déclenche. Quelqu'un peut-il m'aider à faire fonctionner le code sur la charge WebPart inital? Quelqu'un at-il pu obtenir un script côté serveur pour fonctionner de cette manière dans SharePoint?

Merci, Mike V

Répondre

4

Pour cela, vous pouvez profiter de _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>"; 

Modifier Pour tester, mettre le code suivant dans une partie Web Content Editor sur votre page :

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

Kit, Merci pour l'entrée - j'ai essayé est - mais semble ne pas fonctionner ... mais c'est peut-être parce que je l'ajoute au mauvais moment/endroit. Est-ce que j'ajouterais ce code à WebPart OnLoad ou PreRender. J'utilise le ScriptManager pour reger ce script - mais rien ne se passe. – MDV2000

+0

OnLoad ou PreRender devraient tous deux être OK (puisqu'il vient juste d'être ajouté à la collection de contrôle). Cependant, il importera où le script finit sur la page. _spBodyOnLoadFunctionNames se trouve dans /_layouts/1033/init.js, donc votre appel devra venir après le chargement de init.js. J'ai ajouté du code que vous pouvez essayer dans un éditeur de contenu sur votre page. Essayez-le et voyez si vous recevez une alerte Hello World. –

+0

Cet article de Technet pourrait vous donner un aperçu. http://social.technet.microsoft.com/wiki/contents/articles/15790.all-about-sharepoint-javascript-function-spbodyonloadfunctionnames.aspx Vous pouvez simplement ajouter un petit délai au début de votre script avec setTimeout. http://sharepointsolutions.blogspot.com/2007/07/adding-javascript-to-content-editor-web.html – MonkeyWrench

Questions connexes