【问题标题】:Firing OnCreatingModelDataSource event in ASP.NET Web Forms applications在 ASP.NET Web 窗体应用程序中触发 OnCreatingModelDataSource 事件
【发布时间】:2013-10-08 00:08:33
【问题描述】:

所有 ASP.NET 数据绑定控件在 ASP.NET 4.5 中都有一个附加事件,CreatingModelDataSource。它提供了一种很好的方式来创建我们自己的 ModelDataSource 实现并绑定到像 GridView 这样的控件。

我创建了一个示例 ModelDataSource 并在 CreatingModelDataSource 事件中将其与 GridView 挂钩,如下所示:

protected void gvStudent_CreatingModelDataSource(object sender, CreatingModelDataSourceEventArgs e)
{
   e.ModelDataSource = new MyModelDataSource((GridView)sender);
}

以下是我编写的示例 ModeldataSource 实现:

public class MyModelDataSource : ModelDataSource
{
    MyDataSourceView view;
    public MyModelDataSource(Control control)
            : base(control)
    {
    }

    public override ModelDataSourceView View
    {
        get
        {
            if (view == null)
            {
                view = new MyDataSourceView(this);
            }
            return view;
        }
    }
}

以下是MyModelDataSourceView:

public class MyDataSourceView : ModelDataSourceView
{
    private MyModelDataSource _owner;
    private StudentRepository repository;
    public MyDataSourceView(MyModelDataSource owner)
        : base(owner)
    {
        _owner = owner;
        repository = new StudentRepository();
    }

    protected override IEnumerable ExecuteSelect(DataSourceSelectArguments arguments)
    {
        return repository.GetAll();
    }
}

但不会自动调用 ExecuteSelect 方法。当我将 SelectMethod 设置为 GridView 时,它会被调用。由于 ExecuteSelect 方法的结果最终绑定到了 GridView,这里指定 SelectMethod 没有任何意义。此外,调用 gridView.DataBind() 时不会触发该事件。有什么方法可以启动并自动调用此事件?

【问题讨论】:

    标签: asp.net webforms model-binding


    【解决方案1】:

    CreatingModelDataSource() 用于模型绑定中使用的模型数据源。当您使用模型绑定时,您需要指定模型绑定的 Select() 方法才能与 GridVIew 一起使用

    【讨论】:

    • 理想情况下,这种情况下的select方法应该包含什么?我尝试使用返回 null 的 Select 方法,它运行良好。我还观察到 select 方法永远不会执行,因为控件没有在这个方法上遇到断点
    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 2021-05-18
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    相关资源
    最近更新 更多