在运行时插入HTML?

时间:2011-09-04 11:14:22

标签: c# html asp.net

我需要编写一些代码,在页面上的指定位置放置3个html“块”中的一个。我怎么能这样做?

我在想我可以使用单值数据绑定,但我不认为这是正确的方法。

我正在使用ASP.NET c#。

编辑:这就是它的样子:

MapPlaceholder.InnerHtml = @"<div class="mapContainer smallMap" id="smallGrid" runat="server" visible="false">
    <div id="node1" class="gridBox" runat="server">
    </div>
    <div id="node2" class="gridBox" runat="server">
    </div>
    <div id="node3" class="gridBox" runat="server">
    </div>
    <div id="node4" class="gridBox" runat="server">
    </div>
    <div id="node5" class="gridBox" runat="server">
    </div>
    <div id="node6" class="gridBox" runat="server">
    </div>
    <div id="node7" class="gridBox" runat="server">
    </div>
    <div id="node8" class="gridBox" runat="server">
    </div>
    <div id="node9" class="gridBox" runat="server">
    </div>
</div>";

并在.aspx页面中:

<div id="MapPlaceholder" runat="server"></div>

还有一件事,我如何告诉C#实际在字符串中写"?目前它不起作用,因为它停在它找到的第一个"

编辑:我有另一个问题。

                        MapPlaceholder.InnerHtml = block1;
                    HtmlGenericControl smallGrid = (HtmlGenericControl)MapPlaceholder.FindControl("smallGrid");
                    containerName = "smallGrid";
                    smallGrid.Visible = true;
                    smallGrid.Attributes["Style"] = "background-image:url('" + du.getMapBackgroundImage(mapId) + "'); " + "width:300px; height:300px;";
                    containerName = "smallGrid";

这就是我想要做的,但FindControl总是返回null。我调试了这个,似乎正在添加html代码,但仅在页面加载结束后。无论如何,我可以告诉c#“渲染”div,这样我可以像我需要的那样使用它吗?

5 个答案:

答案 0 :(得分:3)

要在代码中使用双引号,在使用@时需要使用其中两个,因此它将是:

MapPlaceholder.InnerHtml = @"<div class=""mapContainer smallMap"" id=""smallGrid"" runat=""server"" visible=""false"">
    <div id=""node1"" class=""gridBox"" runat=""server"">
    </div>
    <div id=""node2"" class=""gridBox"" runat=""server"">
    </div>
    <div id=""node3"" class=""gridBox"" runat=""server"">
    </div>
    <div id=""node4"" class=""gridBox"" runat=""server"">
    </div>
    <div id=""node5"" class=""gridBox"" runat=""server"">
    </div>
    <div id=""node6"" class=""gridBox"" runat=""server"">
    </div>
    <div id=""node7"" class=""gridBox"" runat=""server"">
    </div>
    <div id=""node8"" class=""gridBox"" runat=""server"">
    </div>
    <div id=""node9"" class=""gridBox"" runat=""server"">
    </div>
</div>";

对于你原来的问题:有三个字符串和可能的“块”然后分配正确的字符串:

string block1 = @"<div class=""mapContainer smallMap"">block 1</div>......";
string block2 = @"<div class=""mapContainer smallMap"">block 2</div>......";
string block3 = @"<div class=""mapContainer smallMap"">block 3</div>.......";
switch (myCond) {
    case 1:
        MapPlaceholder.InnerHtml= block1;
        break;
    case 2:
        MapPlaceholder.InnerHtml= block2;
        break;
    case 3:
        MapPlaceholder.InnerHtml= block3;
        break;
}

编辑:看起来你需要不同的方法。首先,将所有块直接放在.aspx控件下的MapPlaceholder内:

<div id="MapPlaceholder" runat="server">
    <div class="mapContainer smallMap" id="smallGrid1" runat="server" visible="false">
        block 1 contents here...
    </div>
    <div class="mapContainer smallMap" id="smallGrid2" runat="server" visible="false">
        block 2 contents here...
    </div>
    <div class="mapContainer smallMap" id="smallGrid3" runat="server" visible="false">
        block 3 contents here...
    </div>
</div>

有了这个,只需根据条件显示正确的控制:

switch (myCond) {
    case 1:
        smallGrid1.Visible = true;
        break;
    case 2:
        smallGrid2.Visible = true;
        break;
    case 3:
        smallGrid3.Visible = true;
        break;
}

这样您就不必乱用原始HTML字符串,可以更改.aspx的布局,这样更方便。

答案 1 :(得分:1)

页面加载

您可以动态插入所需内容。

提示:您可以在Text属性上插入带有html块,javascript或jquery代码的标签

Label myLabel = new Label();
myLabel.Text = @"html text";

Page.Controls.Add(myLabel);

答案 2 :(得分:0)

如果问题确实是“如何将HTML块放到页面上”作为(非常基本的)示例,您可能会发现这样的东西很有用:

ASPX代码:

<div runat="server" id="mydiv"></div>

C#代码:

mydiv.InnerHtml = "<span>hi</span>";

HtmlGenericControl c = new HtmlGenericControl("span");
c.InnerHtml = "hi";
mydiv.Controls.Add(c);

DataBinding更适用于将动态值推送到页面内容,例如数据库。

答案 3 :(得分:0)

PlaceHolder控件可能就是您所需要的:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.placeholder.aspx

<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>

protected void Button1_Click(object sender, EventArgs e)
{
    Label NewLabel = new Label();
    NewLabel.Text = "Hello World!";

    PlaceHolder1.Controls.Add(NewLabel); 
}

答案 4 :(得分:0)

您可以添加HTML标记,并在标签文本或其他文本中连接字符串

labelc.text="Html tags code here";