【问题标题】:asp.net how can ObjectDataSource access System.Web.UI.Page objectsasp.net ObjectDataSource 如何访问 System.Web.UI.Page 对象
【发布时间】:2012-10-09 10:06:30
【问题描述】:

我使用 ObjectDataSource 如下。

<asp:ObjectDataSource ID="Item" runat="server" 
                SelectMethod="Grid_DataBind" TypeName="XXX.XXX.XXX" 
                DataObjectTypeName="Controller.Items" UpdateMethod="UpdateRow_Grid"
                InsertMethod="InsertRow_Grid">

当 InsertMethod 触发时,一切正常,但是 ...

public IList<Items> InsertRow_Grid(Items item)
    {
        item.ID = System.Guid.NewGuid().ToString();          
        bool contains = GridSource.AsEnumerable()
                        .Any(row => item.JobID == row.JobID);
        if (!contains)
        {
            GridSource.Add(item);              
        }
        else
        {              
           lblMsg.Text= "This record has already exists.";               
        }
        return GridSource;
    }

它不知道我的 aspx 文件中显示的标签对象。

我已经阅读了this,以便我可以找到合适的解决方案。

但我仍然不知道该怎么做。

我们将不胜感激。

【问题讨论】:

  • 你在哪里使用 lblMsg 控件,在网格内?请写一些产生同样问题的aspx内容。
  • 请分享用于创建控件“lblMsg”的aspx。

标签: c# asp.net objectdatasource


【解决方案1】:

这是因为 asp:ObjectDataSource 创建了您在“TypeName”属性中指定的对象的新实例 要使用当前页面对象而不是创建新页面对象,您需要以下代码:

YourObjectDataSource.ObjectCreating += (s, a) => { a.ObjectInstance = this; };

将其放在 Page_Load 或 Page_Init 中

【讨论】:

    【解决方案2】:

    您可以将此代码添加到您的页面中

    ...
    <asp:Label id="lblMsg" runat="server"/>
    <asp:ObjectDataSource ID="Item" runat="server" 
                SelectMethod="Grid_DataBind" TypeName="XXX.XXX.XXX" 
                DataObjectTypeName="Controller.Items" UpdateMethod="UpdateRow_Grid"
                InsertMethod="InsertRow_Grid">
    .....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多