我决定帮助我的朋友完成他正在进行的项目。我试图为他编写一个测试网页来验证一些新功能,但在我自动生成的代码中我得到了
CS1106: Extension method must be defined in a non-generic static class
在index.cshtml中实现代码并不是实现此目的的最佳方式,但我们只是尝试进行概念验证,并在以后进行适当的实施。
在我看过的所有地方,他们几乎都说我定义的所有函数都必须在静态类中(如错误状态)。除了拥有我所有功能的类是自动生成而不是静态的,这不会是那么糟糕。我不确定我可以更改哪些设置来解决此问题。
以下是相关(我相信)部分代码的副本。部分或全部功能的实现可能不正确。我还没有测试过它们
@{
HttpRequest req = System.Web.HttpContext.Current.Request;
HttpResponse resp = System.Web.HttpContext.Current.Response;
var url = req.QueryString["url"];
//1 Download web data from URL
//2 Write the final edited version of the document to the response object using resp.write(String x);
//3 Add Script tag for dom-outline-1.0 to html agility pack document
//4 Search for relative URLs and correct them to become absolute URL's that point back to the hostname
}
@functions
{
public static void PrintNodes(this HtmlAgilityPack.HtmlNode tag)
{
HttpResponse resp = System.Web.HttpContext.Current.Response;
resp.Write(tag.Name + tag.InnerHtml);
if (!tag.HasChildNodes)
{
return;
}
PrintNodes(tag.FirstChild);
}
public static void AddScriptNode(this HtmlAgilityPack.HtmlNode headNode, HtmlAgilityPack.HtmlDocument htmlDoc, string filePath)
{
string content = "";
using (StreamReader rdr = File.OpenText(filePath))
{
content = rdr.ReadToEnd();
}
if (headNode != null)
{
HtmlAgilityPack.HtmlNode scripts = htmlDoc.CreateElement("script");
scripts.Attributes.Add("type", "text/javascript");
scripts.AppendChild(htmlDoc.CreateComment("\n" + content + "\n"));
headNode.AppendChild(scripts);
}
}
}
<HTML CODE HERE>
答案 0 :(得分:0)
如果你真的很聪明,你会封装设计来接受代表,理由是如果你使用委托,你不必担心引用静态的东西。
public delegate void MyUrlThing(string url, object optional = null);
可能是一些州......
public enum UrlState
{
None,
Good,
Bad
}
然后void
将成为UrlState
...
另外如果你想要你也可以设置一个文本框并盲目地给它CIL ....
然后你将使用类似的东西编译代表
http://www.codeproject.com/Articles/578116/Complete-Managed-Media-Aggregation-Part-III-Quantu
这样你也可以使用,然后可以选择使用IL来增加你想要的任何东西。
我猜你也可以给它CSharp代码...
如果你想让你继续设计,你也可以选择使用接口...然后将编译好的dll放在一个目录中,然后加载它等......传统上