好的,我遇到了一个已经解决了两天的独特问题。
我有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/