自动生成的代码需要创建静态类

时间:2014-05-21 16:18:59

标签: c# asp.net razor auto-generate

我决定帮助我的朋友完成他正在进行的项目。我试图为他编写一个测试网页来验证一些新功能,但在我自动生成的代码中我得到了

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>

1 个答案:

答案 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放在一个目录中,然后加载它等......传统上