2012-12-06 9 views
1

我正在使用asp.net mvc3 C#項目工作。我想用C#一樣的寬度,高度等。我有一個簡單的(_Layout.cshtml)文件來改變一些HTML元素Html敏捷包創建無關字符保存HTML文件在C#

屬性

<html> <head> 
    <link href="@Url.Content("file.css")" rel="stylesheet" type="text/css" /> 
    <body> 

    <a href="#" id="link1" title="@Function.ConfigElement("FacebookLink")" ></a> 

    </body> 
    </head> </html> 

,所以我使用的HTML敏捷包加載和保存這個文件

HtmlDocument doc= new HtmlDocument(); 

doc.load("_Layout.cshtml"); 

doc.GetElementbyId("link1").Attributes.Add("title", "@Function.ConfigElement("NewLink")"); 

doc.save("_Layout.cshtml"); 

保存文件輸出後就是這個樣子

<html> <head> 
     <link href="@Url.Content("file.css")"="" rel="stylesheet" type="text/css" /> 
     <body> 

     <a href="#" id="link1" title="@Function.ConfigElement("NewLink")"="" ></a> 

     </body> 
     </head> </html> 

(link href)(anchor title)節省一些額外的字符

如何避免這個問題.. 是否有解析HTML在C#中asp.net mvc的任何其他解決方案。

其實我想在這些html元素添加一些服務器端的功能屬性

+0

我想你可以做一個'string.Replace(「= \」\「」,「」);'去掉多餘的字符。雖然這*有點奇怪。 –

回答

3

由於StackOverflow上的語法高亮提示巧妙,你的HTML是非常無效的。

href="@Url.Content("file.css")" 

這實際上是兩個屬性:href="@Url.Content("file.css")"。 (其中沒有值)

您不能使用HTML解析器來解析剃刀標記。
相反,您應該使用實際的Razor分析器。

+0

好吧,我收到了。我的錯 –

+0

任何使用Razor解析器閱讀/修改.cshtml文件的示例/參考? –

1

CSCHTML is not HTML。它是CS,特殊腳本和可選HTML的混合體 - 因此HtmlAgilityPack不是一個讀取/操作它的好工具。

爲什麼會發生,特別是:

來看
<link href="@Url.Content("file.css")" 

HTML表單點有2個屬性和(href和file.css),加上怪 「)」 意外文本。不知怎的,AgilityPack試圖理解它並輸出你得到的任何東西。

+1

實際上'')「'是第二個屬性的一部分。 (因爲沒有'=') – SLaks

+0

好的我得到了它。我的錯 –

+0

@SLaks,可能 - 沒有閱讀HTML規範,仔細知道屬性名稱是以「=」結尾還是不是字母......無論如何它只是不合理的HTML元素。 (你已經給出了正確的答案:)) –