2011-09-03 72 views
3

HTML很大。爲了可以在代碼分配給string後面我做這樣的:如何將HTML分配給代碼後面的字符串?

string myString=""; 
myString+= " <h3>Hello</h3>"; 
myString+=" <p>Name<sup>&reg;</sup> some text"; 
myString+= "<div class=" + "clear" + "></div>"; 
. 
. 
. 
. 
. 

等。這是相當大的,很難維持。我需要指定設計者給出的確切的HTML,但是當我分配時它不是確切的。頁面上的設計被搞砸了。

有沒有一種方法可以讓我不必多次寫myString+=,我可以將整個HTML粘貼到我的ASPX頁面上,並將它一次性分配給字符串?

回答

1

你可以這樣做:

string myString=string.Empty; 
myString = " <h3>Hello</h3>" + 
      " <p>Name<sup>&reg;</sup> some text" + 
      "<div class=" + "clear" + "></div>"; 
2

我不知道你的頁面設計的意思被搞砸了,但也有幾件事情,我建議。

首先,使用StringBuilder來構建字符串。其次,它看起來像你失去了attirbutes報價不逃避他們(把\放在雙引號前面)。

StringBuilder myString = new StringBuilder(); 
myString.Append("<h3>hello</h3><p>Name<sup>&reg;</sup> some text<div class=\"clear\"></div>"); 

一旦你建立了字符串,你可以做myString.ToString()從StringBuilder獲取完整的字符串。

4

最好的方法是將數據從代碼隱藏轉移到視圖/模板。

另一種選擇是將HTML片段存儲爲資源。它允許您從設計器中複製和設置代碼並將其原樣存儲。

在代碼隱藏,你將能夠通過

Resources.YouResourceName 

變量以訪問整個文件內容作爲一個字符串。

此外,如果您需要傳遞某些參數,則可以輕鬆利用格式字符串。

String.Format(Resources.YourResourceName, param1, param2); 
1

最好的方法是將視圖與模型分開。在你的情況下,HTML是視圖,所以做出XXX.aspx的那部分,然後從Code Behind做適當的數據綁定。

1

我會建議在你的"上做一個查找替換,將它們轉換爲"",所以你不必手動轉義它們。然後在第一行前加上@,所以字符串被認爲是逐字。你逃脫"""而不是\"的原因是因爲後者不能以逐字字符串工作。 例如,您的代碼如下:

串的myString = @」 <H3>你好</H3 >

<p>名稱<燮> & REG; </SUP >一些

text < div> class =「」clear「」> </div >「;

1

只是使用服務器控件來包裝html。

<div runat="server" id="HtmlConteiner"> 
    <h3> 
     Hello</h3> 
    <p> 
     Name<sup>&reg;</sup> some text</p> 
    <div class="clear"> 
    </div> 
</div> 

和尖子的HTML如下

string htmlContent = HtmlConteiner.InnerHtml; 
4

編輯: 已經寫了一個很長的回覆這讓我感到你可以以一種非常規的方式這樣做。該頁面的HTML應該在.aspx中,而不是在後面的代碼中(.aspx.cs)..它不是不可能放在.cs文件中,但「通常」HTML將在.aspx中。爲什麼?由於你描述的問題確實存在,所以維護是件痛苦的事!通常我們會將C#代碼與HTML分開...


在您的示例中,您沒有正確處理引號。 「應該成爲\」

考慮

myString+= "<div class=" + "clear" + "></div>"; 

也許應該

myString+= "<div class=\"clear\"></div>"; 

你也可以考慮這些選項,這取決於你想達到一個什麼樣以下應該可以幫助您

1字符串文字

如果你想添加一個字符串「完全」,因爲它給出,你可以使用字符串文字。你所做的只是在你聲明字符串時貼一個@。 (http://www.dotnetperls.com/string-literal)。

您還需要你」,用 「逃離」

例如:

string longstring = @"<h3>Hello</h3><p>Name<sup>&reg;</sup> some text<div class=""clear""></div>"; 

string longerstring = @"<p>String literals are stored in the metadata format that underlies 
all executable C# programs. The metadata format defined in the Common Language 
Specification includes a database of tables with headers and rows in all exe 
files. There are several predefined streams in the metadata files, including the 
#Strings stream and the #US (user strings) stream. The #US stream is used to store 
programmer-defined literals. The metadata tables store offsets into this stream. 
The stream itself is simply a concatenated series of characters used in the entire 
program's strings. The execution engine stores the offsets and tables in memory 
and then simply reads a range in the #US stream when you use the string literal.</p>" 

2資源

但如果你只是存儲頁面的靜態部分,即HTML片段,您可以使用.resx資源(http://msdn.microsoft.com/en-us/library/ekyft91f(v=vs.80).aspx)...OR

3服務器端包含

甚至可能是服務器端包含

<html> 
    <body> 
     <%   
      Response.WriteFile ("Yourfile.inc") 
     %> 
    </body> 
    </html> 

哪裏Yourfile.inc是你的文件系統

http://support.microsoft.com/kb/306575

+0

我以爲雙擊了該文件用於轉義引號的引號(「」)是VB.NET語法,而\是用於C#的?或者是C#中特定於字符串文字的雙引號? – Tim

+0

是的「」是特定的字符串文字:-) – inspite

+0

謝謝 - 我又學到了另一個「小」的東西:) – Tim