Asp.net 在sharepoint母版页上查找控件
我正在尝试遍历sharepoint页面上的所有控件,出于测试目的,我只想输出控件ID 这是我正在使用的代码 公共共享子替换值3(ByVal CurrentPage作为页面,ByRef s作为StringBuilder)Asp.net 在sharepoint母版页上查找控件,asp.net,sharepoint,master-pages,Asp.net,Sharepoint,Master Pages,我正在尝试遍历sharepoint页面上的所有控件,出于测试目的,我只想输出控件ID 这是我正在使用的代码 公共共享子替换值3(ByVal CurrentPage作为页面,ByRef s作为StringBuilder) ”第页() -母版页 '-HtmlForm '-ContentPlaceHolder “-文本框等。 对于CurrentPage.Controls中的每个ctlMaster控件 如果ctlMaster的类型为母版页,则 HttpContext.Current.Response.O
”第页()
-母版页
'-HtmlForm
'-ContentPlaceHolder
“-文本框等。
对于CurrentPage.Controls中的每个ctlMaster控件
如果ctlMaster的类型为母版页,则
HttpContext.Current.Response.Output.Write(“母版页
”)
对于ctlMaster.Controls中的每个ctlForm As控件
如果ctlForm的类型是HtmlForm,那么
HttpContext.Current.Response.Output.Write(“HTML表单
”)
对于每个ctlForm.Controls中的ctlContent As控件
如果ctlContent的类型为ContentPlaceHolder,则
HttpContext.Current.Response.Output.Write(“内容占位符
”)
对于ctlContent.Controls中的每个ctlChild As控件
HttpContext.Current.Response.Output.Write(ctlChild.ID.ToString&“
”)
下一个
如果结束
下一个
如果结束
下一个
如果结束
下一个
HttpContext.Current.Response.Output.Write(“----------------”)
HttpContext.Current.Response.End()
然而,它并没有通过“母版页”输出
我希望在我的内容占位符中看到所有控件的名称,但我觉得这有点混乱。母版页不是当前页面的控件,它是当前页面的属性,在页面中。母版页从page.Master.controls开始 从那以后,你所拥有的基本上都会起作用
For Each ctlForm As Control In Page.Master.Controls
If TypeOf ctlForm Is HtmlForm Then
HttpContext.Current.Response.Output.Write("HTML Form <br/>")
For Each ctlContent As Control In ctlForm.Controls
If TypeOf ctlContent Is ContentPlaceHolder Then
HttpContext.Current.Response.Output.Write("Content Placeholder <br/>")
For Each ctlChild As Control In ctlContent.Controls
HttpContext.Current.Response.Output.Write(ctlChild.ID.ToString & "<br />")
Next
End If
Next
End If
Next
对于Page.Master.Controls中的每个ctlForm As控件,
如果ctlForm的类型是HtmlForm,那么
HttpContext.Current.Response.Output.Write(“HTML表单
”)
对于每个ctlForm.Controls中的ctlContent As控件
如果ctlContent的类型为ContentPlaceHolder,则
HttpContext.Current.Response.Output.Write(“内容占位符
”)
对于ctlContent.Controls中的每个ctlChild As控件
HttpContext.Current.Response.Output.Write(ctlChild.ID.ToString&“
”)
下一个
如果结束
下一个
如果结束
下一个
我发现这段代码似乎列出了我需要的控件,但我认为这更像是一种黑客行为
For i = 0 To CurrentPage.Request.Form.AllKeys.Length - 1
If CurrentPage.Request.Form.GetKey(i).Contains("ctl00$PlaceHolderMain$") Then
Dim key As String = CurrentPage.Request.Form.GetKey(i).Substring(22)
Dim keyText As String = String.Format("[{0}]", key)
HttpContext.Current.Response.Output.Write(keyText & "<br/>")
'Text.Replace(keyText, CurrentPage.Request.Form("ctl00$PlaceHolderMain$" & key))
End If
Next
i=0到CurrentPage.Request.Form.AllKeys.Length的1
如果CurrentPage.Request.Form.GetKey(i).包含(“ctl00$PlaceHolderMain$”),则
Dim key As String=CurrentPage.Request.Form.GetKey(i).子字符串(22)
Dim keyText作为String=String.Format(“[{0}]”,key)
HttpContext.Current.Response.Output.Write(keyText&“
”)
'Text.Replace(keyText,CurrentPage.Request.Form(“ctl00$PlaceHolderMain$”&key))
如果结束
下一个
您可以简单地使用递归来实现这一点,而不是efficent,但它很简单。。。尝试以下方法:
公共控件(控件输入)
这将在页面上的所有控件之间循环,输出它们的type-ID,并将其打印到页面顶部。。。您还可以使用该代码来构建列表或任何您想做的事情。为了澄清,这是从Web部件还是从SharePoint母版页中完成的?您如何调用SubstituteValues3?您为CurrentPage参数指定了什么值?如回答中所述,您的代码可能永远不会工作,因为母版页不是该页的子控件。
For i = 0 To CurrentPage.Request.Form.AllKeys.Length - 1
If CurrentPage.Request.Form.GetKey(i).Contains("ctl00$PlaceHolderMain$") Then
Dim key As String = CurrentPage.Request.Form.GetKey(i).Substring(22)
Dim keyText As String = String.Format("[{0}]", key)
HttpContext.Current.Response.Output.Write(keyText & "<br/>")
'Text.Replace(keyText, CurrentPage.Request.Form("ctl00$PlaceHolderMain$" & key))
End If
Next
{
foreach (Control c in input.Controls)
{
Response.Write(c.GetType().ToString() + " - " + c.ID + "<br />");
getControls(c);
}
}
getControls(Page);