我正在使用asp.net mvc3 C#开发项目。我想改变一些html元素
属性由c#表示宽度,高度等。我有一个简单的(_ Layout.cshtml)文件
<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 agility pack加载并保存这个文件
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)
中保存了一些额外的字符
我怎样才能避免这个问题.. 对于asp.net mvc,在c#中解析html是否还有其他解决方案。
实际上我想在这些html元素属性
中添加一些服务器端功能答案 0 :(得分:3)
当StackOverflow的语法高亮显示提示时,您的HTML非常无效。
href="@Url.Content("file.css")"
这实际上有两个属性:href="@Url.Content("
和file.css")"
。 (没有价值)
您不能使用HTML解析器来解析Razor标记 相反,您应该使用实际的Razor解析器。
答案 1 :(得分:1)
CSCHTML 不是 HTML。它是CS,特殊脚本和可选HTML的混合 - 所以HtmlAgilityPack不是一个阅读/操作它的好工具。
为什么会发生这种情况:
<link href="@Url.Content("file.css")"
表单HTML的观点有2个属性和(href和file.css)加上奇怪的“)”意外文本。不知怎的,AgilityPack试图理解它并输出你得到的任何东西。