如何将HTML分配给代码后面的字符串?

时间:2011-09-03 06:30:47

标签: c# asp.net html

HTML很大。为了将其分配给后面的代码string,我这样做:

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

等等。它非常大而且难以维护。我需要分配设计师给出的确切HTML,但是当我分配时它并不准确。页面上的设计搞砸了。

有没有一种方法可以使用我不必多次写myString+=而我可以将整个HTML粘贴到我的ASPX页面上并一次性将它分配给字符串?

7 个答案:

答案 0 :(得分:4)

最好的方法是将数据从代码隐藏转移到视图/模板。

另一种选择是将HTML代码段存储为资源。它允许您只是从设计器复制和设置代码并按原样存储它。

在代码隐藏中,您将能够通过

以字符串形式访问整个文件内容
Resources.YouResourceName 

可变

此外,如果需要传递一些参数,将很容易利用格式字符串。

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

答案 1 :(得分: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)......或者

3服务器端包含

甚至可能包括服务器端

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

Wherefile.inc是文件系统上的文件

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

答案 2 :(得分: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中获取完整的字符串。

答案 3 :(得分:1)

你可以这样做:

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

答案 4 :(得分:1)

最好的方法是将View与Model分开。在您的情况下,HTML是视图,因此将这些部分作为XXX.aspx,然后从Code Behind执行适当的数据绑定。

答案 5 :(得分:1)

我建议您在"上执行find-replace以将其转换为"",这样您就不必手动转义它们。然后在第一行前加@,因此该字符串被视为 verbatim 。您将"作为""而不是\"转义的原因是因为后者不会在逐字字符串中工作。 例如,您的代码将如下所示:

  

string myString = @“&lt; h3&gt; Hello&lt; / h3&gt;

     

&LT; p为H.名称&LT;坐席&GT;&安培; REG;&LT; / SUP&GT;一些

     

text&lt; div&gt;类= “” 清晰 “” &GT;&LT; / DIV&gt;“中;

答案 6 :(得分: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;