프로그래밍 방식으로 <asp:ContentPlaceHolder>
의 내용을 설정하는 가장 쉬운 방법은 무엇입니까? 내가 아프다고 전화하면 Master.FindControl
전화가 필요하니?ASP : ContentPlaceHolder 콘텐츠 프로그래밍 방식으로
답변
빈 페이지에 컨트롤을 추가하는 경우 Page.Controls.Add() .... no? 페이지가 MasterPage에서 상속하는 경우
, 당신은 ASP가 있어야 : 콘텐츠 컨트롤을 페이지에 어떤 ID로,과 같이 :
<asp:Content runat="server" ID="myContent" ContentPlaceHolderID="masterContent">
</asp:Content>
당신은 당신의 코드 숨김이를 참조하고 추가 할 수 있어야 네가 원하는대로.
public void Page_Load(object sender, EventArgs e)
{
HtmlContainerControl div = new HtmlGenericControl("DIV");
div.innerHTML = "....whatever...";
myContent.Controls.Clear();
myContent.Controls.Add(div);
}
외부에 서식 지정 HTML이 있는지 확인합니다. – Shawn
나는 이것이 오래되었다는 것을 알고 있지만 기술적으로 새로운 HtmlGenericControl ("div")이어야하며 HtmlContainerControl은 추상적이어서 만들 수 없다 ("div"변수를 그 유형으로 형변환 할 수 있음). – McGuireV10
@ McGuireV10 - 고마워요. 나는 웹 폼을 남겨 두었던 것을 매우 기쁘게 생각합니다. – tvanfosson
나는 컨트롤 (예를 들어 자리 표시 자) 재귀 적으로 당신이 ID를 기준으로 찾고있는 컨트롤을 찾아서 반환을 검색하는 사용자 정의 확장 방법을 사용합니다. 그런 다음 필요에 따라 반환 된 컨트롤을 채울 수 있습니다. foreach 루프에서 this를 호출하여 채울 컨트롤 목록을 반복합니다.
public static class ControlExtensions
{
/// <summary>
/// recursive control search (extension method)
/// </summary>
public static Control FindControl(this Control control, string Id, ref Control found)
{
if (control.ID == Id)
{
found = control;
}
else
{
if (control.FindControl(Id) != null)
{
found = control.FindControl(Id);
return found;
}
else
{
foreach (Control c in control.Controls)
{
if (found == null)
c.FindControl(Id, ref found);
else
break;
}
}
}
return found;
}
}
C# 코드에 사과드립니다. vb 태그가 없습니다. – flesh
미안하지만 실제 내용이 채워지는 것을 생략했습니다. 실제 컨트롤이 생성되지 않았습니다. – Anders
구체적인 내용이 가득 찼습니까? 원시 html 또는 텍스트? –
텍스트 만, contentplaceholder – Anders