HTML很大。为了将其分配给后面的代码string
,我这样做:
string myString="";
myString+= " <h3>Hello</h3>";
myString+=" <p>Name<sup>®</sup> some text";
myString+= "<div class=" + "clear" + "></div>";
.
.
.
.
.
等等。它非常大而且难以维护。我需要分配设计师给出的确切HTML,但是当我分配时它并不准确。页面上的设计搞砸了。
有没有一种方法可以使用我不必多次写myString+=
而我可以将整个HTML粘贴到我的ASPX页面上并一次性将它分配给字符串?
答案 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>®</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是文件系统上的文件
答案 2 :(得分:2)
我不确定你的页面设计是什么意思搞砸了,但我推荐了几件事。
首先,使用StringBuilder构建字符串。其次,看起来你是因为没有逃避它们而丢失了attirbutes上的引号(在双引号前加上\)。
StringBuilder myString = new StringBuilder();
myString.Append("<h3>hello</h3><p>Name<sup>®</sup> some text<div class=\"clear\"></div>");
一旦构建了字符串,就可以myString.ToString()
从StringBuilder中获取完整的字符串。
答案 3 :(得分:1)
你可以这样做:
string myString=string.Empty;
myString = " <h3>Hello</h3>" +
" <p>Name<sup>®</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>®</sup> some text</p>
<div class="clear">
</div>
</div>
并将html作为以下内容
string htmlContent = HtmlConteiner.InnerHtml;