2010-10-01 42 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>