2011-09-03 71 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