【问题标题】:C# ASP Callback Adding Class IssueC# ASP 回调添加类问题
【发布时间】:2013-06-21 14:15:46
【问题描述】:

我创建了一个独立的应用程序,它可以与我的回调一起使用。我正在尝试将其集成到更大的应用程序中,但遇到了一些问题。

我的单机应用回调代码:

public partial class Default : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
{

    protected void Page_Load(object sender, EventArgs e)
    {
        //unimportant specific code

        //Get the Page's ClientScript and assign it to a ClientScriptManger
        ClientScriptManager cm = Page.ClientScript;

        //Generate the callback reference
        string cbReference = cm.GetCallbackEventReference(this, "arg", "HandleResult", "");

        //Build the callback script block
        string cbScript = "function CallServer(arg, context){" + cbReference + ";}";

        //Register the block
        cm.RegisterClientScriptBlock(this.GetType(), "CallServer", cbScript, true);

    }


    public void RaiseCallbackEvent(string eventArgument)
    {

        //unimportant specific code

        //This method will be called by the Client; Do your business logic here
        //The parameter "eventArgument" is actually the paramenter "arg" of CallServer(arg, context)

        GetCallbackResult(); //trigger callback
    }

    public string GetCallbackResult()
    {

        //unimportant specific code

        return callbackMessage;
    }

    //more specific unimportant stuff

}

为什么我不能像这样将类添加到我更大的应用程序中:

public class My_App_ItemViewer : abstractItemViewer, System.Web.UI.Page, System.Web.UI.ICallbackEventHandler

在 Visual Studio 中,我收到一条错误消息,提示需要“页面”界面名称。

在回调代码本身中,我收到一个错误,它引用 ClientScript 说“无法在非静态上下文中访问静态属性 'clientSript'”。

我不太了解这些术语...我没有 CS 学位或任何东西,所以如果有人能解释这一点,那就太好了(也许甚至是最伟大的),谢谢!

【问题讨论】:

    标签: c# class callback icallbackeventhandler


    【解决方案1】:

    C#不支持多重继承,所以不能做下面这行:

    public class My_App_ItemViewer : abstractItemViewer, System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
    

    只是为了澄清一下,按照您编写上述内容的方式,C# 编译器认为 abstractItemViewer 是您尝试继承的类。编译器然后看到“System.Web.UI.Page”部分并正在寻找一个名为 that 的接口,它没有找到它,因为 System.Web.UI.Page 是一个类而不是一个接口;因此错误。

    但是,您可以实现多个接口,因此您可以执行以下操作:

    public class My_App_ItemViewer : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler, IAbstractItemViewer
    

    【讨论】:

    • 我想我跟着你,但就我而言,'abstractItemViewer' 是一个单独的类。应用您的知识,错误似乎是 c# 将 abstractItemViewer 视为接口而不是类。此外,您似乎只能拥有一个“继承的类”(这可能就是您所说的多重继承。那么我该如何解决这个问题?创建另一个类“mycallback”并继承 my_app_viewer?
    • 所以,我只是去了我的抽象类并添加了'system.web.ui.page'继承,并且至少编译了它。我正在做更多的测试,看看它是否真的有效......
    • 现在的问题是页面源代码中显示了实际的回调 javascript 脚本。这是因为我将 System.Web.UI.Page 和 System.Web.UI.ICallbackEventHandler 分离到了两个不同的页面吗?
    • 看起来“page_load”没有触发。我找到了link,但是当我输入public My_App_ItemViewer() { this.Load += new EventHandler(this.Page_Load); } 时,我收到一条错误消息,提示my_app_itemviewer 已经定义...
    • 对不起,我有一段时间不在工作,刚刚回复您的回复。对于您的第一个回复,您的 abstractItemViewer 是一个类,而 ASP.NET 页面也是一个类,这就是您无法从两者继承的原因。 abstractItemViewer 是一个页面还是一个独立的类? abstractItemViewer 的目的是什么?
    猜你喜欢
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多