【问题标题】:Add remote method to GridView event将远程方法添加到 GridView 事件
【发布时间】:2017-11-09 17:14:07
【问题描述】:

我有一个 aspx web 应用程序,它有多个具有类似方法的 GridView。我的想法是创建一个具有可重用方法的“助手”类。我的问题是使用这些远程类方法的最佳方式是什么?

前端不接受这样的 class.method:

<asp:GridView runat="server" ID="myGridView" ... OnSorting="myClass.reusableMethod"

当我在 Page_Load 上附加处理程序时,Visual Studio 没有给我任何编译错误,但我确实收到了一个运行时错误,说 GridView 试图触发事件但它不存在。

if (!IsPostBack)
{
    myGridView.Sorting += myClass.reusableMethod;
}

我很确定最后一种方法会奏效,但似乎适得其反。像往常一样在页面后端创建方法,但唯一的一行是调用远程方法

public void myGridView_Sorting(object sender, GridViewSortEventArgs e)
{
    myClass.reusableMethod();
}

【问题讨论】:

    标签: c# asp.net gridview event-handling reusability


    【解决方案1】:

    这是可以做到的。首先从 GridView 中移除 OnSorting 事件。

    <asp:GridView ID="myGridView" runat="server" AllowSorting="true">
    

    然后只绑定IsPostBack检查之外的方法。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //do not bind the event here
        }
    
        //but here
        myGridView.Sorting += myClass.reusableMethod;
    }
    

    现在你可以使用方法

    public static void reusableMethod(object sender, GridViewSortEventArgs e)
    {
        GridView gv = sender as GridView;
    }
    

    【讨论】:

    • 不是!PostBack 基本上是指第一次点击页面吗?为什么那行不通?还是 gridview 在回发时丢失了处理程序?因此代码不会在回发后重新添加处理程序?
    • 是的。但是由于您正在动态绑定事件,因此您需要在每次页面加载时都这样做,否则它会在 PostBack 上丢失。如果丢失也不会触发。
    • 好的,我不知道它会丢失回发任务。现在这是有道理的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    相关资源
    最近更新 更多