【问题标题】:how can I access my public method from aspx code behind to a public class?如何从后面的 aspx 代码访问我的公共方法到公共类?
【发布时间】:2012-04-25 14:44:09
【问题描述】:

我的 aspx 代码中有一个名为 PhotoDatabinding 的公共方法,它的作用是将数据库绑定到列表视图控件。

public void PhotoDatabinding()
{


lnqPhotoDataContext dbCon = new lnqPhotoDataContext();
var res = from p in dbCon.Photos orderby p.PhotoID descending select new {          p.PhotoID, p.FileName };

    lvSubAlbumDB.DataSource = res;
    lvSubAlbumDB.DataBind();

 }

现在,在我的名为 Process 的公共类中,我有一个名为 UpdateSave 的方法。我的问题是如何访问 PhotoBinding 方法,使其看起来像这样

public class Process
{
public UpdateSave()
{
    ....some code
    PhotoDatabinding();

}

}

感谢并感谢您的所有帮助和建议。

【问题讨论】:

  • ProcessPhotoDatabinding所在的类是什么关系?该类是创建Process 的实例,还是创建一个创建它的类?
  • 通常,您的页面将使用 Process 类,而不是相反。您在层之间以错误的方向进行调用。
  • 我同意大卫的观点,这是错误的方向。
  • 大卫是正确的。我会重新考虑你的设计。它会让您的生活更轻松。
  • Silverlight FileUpload 控件有一个名为 FileUploadProcess 的类,可以将照片上传到您的服务器。我的 aspx.cs 中的 PhotoBinding 方法基本上是更新列表视图以使用当前上传的照片更新页面。谢谢大家的意见和建议。

标签: c# asp.net


【解决方案1】:

清除流量:

您需要创建一个仅用于从数据库获取数据或更新数据的类

public class PhotoAccess
{

  public class PhotoInfo
  {
    public int PhotoID {get; set;}
    public string FileName {get; set;}
  }

  public IEnumerable<PhotoInfo> GetPhotos()
  {
   using ( var dbCon = new lnqPhotoDataContext())
   {
      var res = from p in dbCon.Photos 
            orderby p.PhotoID descending 
            select new PhotoInfo 
                       {
                          p.PhotoID, 
                          p.FileName 
                       };
      return res.AsEnumerable();
    }
  }
  public bool UpdateSave(...)
  {
      ... code to do update or save, use here only classes for working with the DB
  }
}

然后在页面后面的代码中

protected void Page_Load(object sender, EventArgs e)
{
   if (!Page.IsPostBack)
   {
       var dataAccess = new PhotoAccess();
       var items = dataAccess.GetPhotos();

       lvSubAlbumDB.DataSource = items;
       lvSubAlbumDB.DataBind();
   }
}
protected void btSave_OnClick(object sender, EventArgs e)
{
    var dataAccess = new PhotoAccess();
    dataAccess.UpdateSave(...pass here the parameters or an object which is going to be inserted);

    var items = dataAccess.GetPhotos();

    lvSubAlbumDB.DataSource = items;
    lvSubAlbumDB.DataBind();
}

您还可以将绑定代码重构为 Page 类的另一个方法

private void BindAlbum()
{
   var dataAccess = new PhotoAccess();
   var items = dataAccess.GetPhotos();    

   lvSubAlbumDB.DataSource = items;
   lvSubAlbumDB.DataBind();
}

页面加载将是:

 protected void Page_Load(object sender, EventArgs e)
    {
       if (!Page.IsPostBack)
       {
           BindAlbum();
       }
    }

和更新处理程序

 protected void btSave_OnClick(object sender, EventArgs e)
    {
        var dataAccess = new PhotoAccess();
        dataAccess.UpdateSave(...pass here the parameters or an object which is going to be inserted);

        BindAlbum();
    }

【讨论】:

  • 嗨,阿德里安,首先我感谢您提供的所有示例。为了让您更多地了解我想要实现的目标是,在我的“添加照片”页面上,我有一个带有数据绑定的 listview 控件和一个 silverlight [link](FileUpload) 控件,我无法调用 PhotoDatabinding 方法来更新 Listview 控件在我的添加照片页面中。
  • 必须有一种方法可以让控件引发一个表示图像已上传的事件。
  • 完全正确...但我无法在 silverlight FileUpload.xap 控件上传按钮中引发任何事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 2018-09-27
  • 2011-10-31
  • 2014-09-30
  • 2023-03-29
  • 2011-02-11
  • 2014-01-26
相关资源
最近更新 更多