在做sharepoint的webpart时,有时需要用javascript去控制一些webpart部件,但是webpart部件在被生成在页面上时,id值会被转换,根据机器的不同,体现不同的ID,唯有掌握id转换的规律,才能真正有效的实现让javascript去控制webpart上的控件~
我们先来看一段代码,看看一个DropdownList在被生成在网页上后的变成了什么:
<span dir="none"><select name="ctl00$m$g_97c2f67c_040f_4ebb_a021_6180784a64cb$ctl00$Taxonomy$ctl00$DropDownChoice" id="ctl00_m_g_97c2f67c_040f_4ebb_a021_6180784a64cb_ctl00_Taxonomy_ctl00_DropDownChoice" title="所属分类" class="ms-RadioText">
<option selected="selected" value="-- 请选择 --">-- 请选择 --</option>
<option value="规章制度">规章制度</option>
<option value="政策解读">政策解读</option>
<option value="公司策略">公司策略</option>
</select><br></span>
下拉框的id从原来的"Taxonomy"变成了"ctl00_m_g_97c2f67c_040f_4ebb_a021_6180784a64cb_ctl00_Taxonomy_ctl00_DropDownChoice",很乱。
sharepoint的webpart中,控件id的命名(生成后的)规则是:
机器id + "_ctl00_" + 控件原来id + "_ctl00_ctl00_" + 控件类型
控件原来的id和控件类型,都是相对死的,都是人为设定后可以得到的,关键是机器id怎么获得。
下面这段代码将获得机器id:
string id = string.Empty;
try
{
foreach (WebPart wp in this.Zone.WebParts)
{
if (wp is Microsoft.SharePoint.WebPartPages.ListFormWebPart) //首先找到列表webpart
{
Microsoft.SharePoint.WebPartPages.ListFormWebPart listWp =
(Microsoft.SharePoint.WebPartPages.ListFormWebPart)wp;
id = listWp.ClientID;
}
}
}
catch { }
所以,一个原来id为"AuthorName"的单行文本框的生成后id,应该是:
string id = string.Empty;
string result= id + "_ctl00_AuthorName_ctl00_ctl00_TextField";
try
{
foreach (WebPart wp in this.Zone.WebParts)
{
if (wp is Microsoft.SharePoint.WebPartPages.ListFormWebPart)
{
Microsoft.SharePoint.WebPartPages.ListFormWebPart listWp =
(Microsoft.SharePoint.WebPartPages.ListFormWebPart)wp;
id = listWp.ClientID;
}
}
}
catch { }