好的,我遇到了一个已经解决了两天的独特问题。

我有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>";


编辑
要进行测试,请将以下代码放在页面上的“内容编辑器” Web部件中:

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

关于javascript - Sharepoint自定义WebPart启动脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3338590/

10-11 11:31