0

好的,我遇到了一个两天来一直试图解决的独特问题。

我有 System.Web.UI.WebControls.WebParts.WebPart 控件,我正在使用它构建自定义 Sharepoint View。除了一个小问题,我想做的几乎所有事情都在工作。我需要使用 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 加载上工作的代码吗?有没有人能够让服务器端脚本在 SharePoint 中以这种方式工作?

谢谢,迈克五世

4

1 回答 1

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>
于 2010-07-26T20:41:45.153 回答