0

这就是我的困境。我正在编写一个自定义的一次性内容管理系统,但我一生都无法让这种方法正常工作。我想要做的是在单独的文件夹中创建一个包含方法的洗衣清单,并在需要时在我想要调用它们的任何 Web 表单上调用它们。

我创建了一个 WebApp 并在应用程序内创建了一个名为 App_Code 的文件夹。在 App_Code 内部,有一个名为“TestimonialService”的公共类。这里是:

/******************** TESTIMONIAL SERVICE ****************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BlueTreeSecurity.App_Code.Data;

namespace BlueTreeSecurity.App_Code.Testimonials
{
public class TestimonialService
{
    private readonly CMSObjectContext _context;
    public TestimonialService(CMSObjectContext context)
    {
        this._context = context;
    }

    #region methods

    /// <summary>
    /// Gets all testimonials
    /// </summary>
    /// <returns>testimonial collection</returns>
    public List<Testimonial> GetAllTestimonials()
    {
        var query = from t in _context.Testimonials
                    orderby t.DisplayOrder ascending
                    select t;
        if (query.Count() > 0)
        {
            var testimonial = query.ToList();
            return testimonial;
        }
        else
        {
            return null;
        }
    }


    #endregion
    }
}

然后在实际的 aspx.cs 页面上,我调用这样的函数:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BlueTreeSecurity.App_Code;
using BlueTreeSecurity.App_Code.Data;
using BlueTreeSecurity.App_Code.Testimonials;

namespace BlueTreeSecurity
{
    public partial class Testimonials : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            this.Page.Title = "Testimonials | ...";

            Bind_Data();
    }

    protected void Bind_Data()
    {
        /** when i try to use intellisense here it's not recognized. **/

        var testimonials = TestimonialService.GetAllTestimonials();

        rptTestimonials.DataSource = testimonials;
        rptTestimonials.DataBind();
    }
}

}

确切的错误吐回是这样的:

Error   1   
An object reference is required for the non-static field, method, or property
'BlueTreeSecurity.App_Code.Testimonials.TestimonialService.GetAllTestimonials()'

伙计们,任何事情都会不胜感激。我在这里扯我的头发。

这是项目结构

- Blue Tree Security (main project)
   - App_Code
      +  Data
      +  Testimonials
         + TestimonialService.cs
   Rest of the .aspx, .aspx.cs, and .ascx files.
4

1 回答 1

2

如果我在这里没有完全误解,那么您收到的错误消息就是告诉您问题出在哪里。将 GetAllTestimonials() 设为静态或实例化 TestimonialService 实例。

protected void Bind_Data()
{
    var testimonialService = new TestimonialService(yourContextObect);

    var testimonials = testimonialService.GetAllTestimonials();

    rptTestimonials.DataSource = testimonials;
    rptTestimonials.DataBind();
}
于 2012-04-25T10:59:46.637 回答