2010-10-01 41 views
2

我有一个问题,所以希望你们可以帮忙! 我在代码中有一个字符串后面这样在ASP.Net中将html字符串转换为服务器控件

string html = "<asp:CheckBox ID=\"CheckBox1\" runat=\"server\" />"; 

那么如何将其插入到aspx页面,并在页面渲染,将其转换我的字符串作为我把它写自己在网页

希望你球员可以帮助

在此先感谢!

让我先说,这就是为什么我必须用这种方式,因为我在做我自己的模板项目 我有一个HTML文件中像index.html,然后里面有这样

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
     <title> 
     {title_page} 
     </title> 
    <link href="css/temp_css.css" rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="somejs.js"></script> 
    <script type=”text/javascript”> 
     //code js here 
    </script> 
    </head> 
    <body> 
    <div>**{main_menu}**</div> 
    <div>**{footer}**</div> 
    </body> 
</html> 

一些HTML代码你们所有人都可以看到我自己的标记({main_menu},{footer}),我只是想在页面渲染时将我的Web用户控件替换为该标记,就是这样!

有什么想法让我离开这种方式吗?

+0

对不起,我做下的,为什么你不只是这种控制的代码隐藏添加到控件集合不大? – 2010-10-01 09:54:33

回答

0

控件的服务器端标记不仅仅是文本 - 视觉sutdio生成具有正确类型的字段并在代码后面设置不同的属性。

这当然不会出现在一个简单的字符串中,就像在你的代码示例中一样。

如果您想动态添加控件,您需要在您的代码中创建它并将其添加到代码中的页面(请参阅GenericTypeTea的答案)。

您还需要记住page life cycle,因为您需要在每次回发时重新创建控件(最好在OnInit事件处理程序中完成)。

编辑:

从您的编辑,我明白你试图完成的任务,然而,这是一个非常难的问题。

您需要动态解析和编译网页划分为管制,改变所有的文本内容,以控制和处理所有的回传等

为什么不能只需使用母版页和控制?

+0

需要帮助!你可以再次检查问题,我只是编辑和改变一些词 – 2010-10-01 09:30:01

+0

这4你的重新回答,非常感谢!我确实有使用母版页的想法,但我认为使用这种方式,设计师很难制作模板,所以我想通过制作一些标记来简单地制作模板,以便设计师可以轻松地做到这一点!无论如何,这么多^^! – 2010-10-01 09:58:09

0

您不能像您所显示的那样使用字符串。相反,你必须实例化并添加一个CheckBox控件,例如是这样的:

ASPX:

<asp:Panel id="panel1" runat="server" ...> 

后台代码:

var cb = new CheckBox(); 
    cb.ID = "CheckBox1"; 
    cb.Text = "text ..."; 
    //.. set properties of checkbox 
    panel1.Controls.Add(cb); 

更新:你的编辑后,似乎你可能想在master pages看看,即转您的HTML模板放入主页面,然后将真实内容放到使用该主页面的页面上。

+0

需要帮助!你可以再次检查问题,我只是编辑和改变一些词 – 2010-10-01 09:31:06

2

我从来没有见过这样做,所以我甚至不知道这是可能的。然而,这当然是不好的做法。为什么不能不使用字符串而自己添加控件?

protected void Page_Init(object sender, EventArgs e) 
{ 
    CheckBox checkBox = new CheckBox(); 
    checkBox.ID = "CheckBox1"; 
    Page.Controls.Add(checkBox); // Replace Page with any other Control to add to 
} 
+0

这是帮助!你可以再次检查问题,我只是编辑和改变一些单词 – 2010-10-01 09:28:12

+0

@Chrno爱 - 写出一个字符串并期望服务器知道它存在是不可能的。如果你没有使用'runat ='server''通过使用'Render'事件,你可以做。 – GenericTypeTea 2010-10-01 09:37:28

0

总的来说,我同意上面的大多数评论,并会建议你看看你的设计,如果你真的想尝试这样做。

话虽如此,你的问题让我想到了为什么不使用Render事件?

当Render事件被覆盖时,开发人员可以将自定义HTML写入浏览器Render方法以HtmlTextWriter对象作为参数,并使用该对象输出要流式传输到浏览器的HTML。 此时仍然可以进行更改,但它们仅反映给客户端。

东西上的线: -

protected override void Render(HtmlTextWriter output) 
{ 
    output.Write ("<h3> Hello </h3>"); 
} 

如果你把你的HTML字符串在这里,我相信它应该工作。

注1:由于这种变化反映在客户端上唯一的,我严重怀疑你怎么可以做任何有用的事情,即使你是用至少应客户展示你的控件

注2结束了:我从来没有试图做这样的事情,但你的问题让我思考!

+0

需要帮助!你可以再次检查问题,我只是编辑并改变一些词 – 2010-10-01 09:30:47

1

使用面值:

<code>string html = "<asp:CheckBox ID=\"CheckBox1\" runat=\"server\" />"; 
Literal lt = new Literal(); 
lt.Text = html; 
ServerDIV.Controls.Add(lt); 
</code>