调用网页的方法而不实例化页面

时间:2013-03-30 15:53:02

标签: c# asp.net webforms

在我的应用程序中,我们有一个aspx页面frmwebform1。 此页面有一个静态方法GetmyData(),它调用帮助程序类HelperClass 但代码的问题在于,当我们调用方法GetHelperData()时,在此 helper类它实例化frmwebform1以获取其方法FillGrid()。 问题是当它实例化frmwebform1时,我们正在丢失entityIdentityType值。

有没有办法在没有实例化FillGrid()页面的情况下调用方法frmwebform1。不幸的是,我无法将FillGrid()方法视为静态方法 会损害我们的数据。

先谢谢你的帮助。

//frmwebform1.aspx.cs
public partial class frmwebform1 : System.Web.UI.Page 
{
    string entityId;
    string entityType;

    protected void Page_Load(object sender, EventArgs e)
     {
       if (Request.QueryString["entityId"] != null)
         {
           entityType = Request.QueryString["entityType"].ToString().ToUpper();
           entityId = Request.QueryString["entityId"].ToString();       
         }
       if (!IsPostBack)
         {
           grdMygrid.DataSource = FillGrid();
           grdMygrid.DataBind();
         }
    }
        public  DataTable FillGrid()
            {
                string server = HttpContext.Current.Session["Server"].ToString();
                string database = HttpContext.Current.Session["Database"].ToString();
                string usrID =HttpContext.Current.Session["user_ID"].ToString();
                Data tr = new getData(server, database, usrID);
                DataTable dt = tr.getAllEntities(entityId);

                return dt;
            }

        [WebMethod]      //AJAX page method
            public static List<class1> GetmyData()
            {
                HelperClass helper = new HelperClass();
                return helper.GetHelperData();
            }

 }

//Second Class

 public class HelperClass
    {
        public  List<class1> GetHelperData()
        {
            frmwebform1 form1 = new frmwebform1();
            DataTable dt = form1.FillGrid();

            List<class1> list = new List<class1>();
            class1 item;

            foreach (DataRow dr in dt.Rows)
            {
                item = new TaxHistory();
                item.txr_guid = dr["txr_guid"].ToString();                
                item.Amount = string.Format("{0}", dr["Amount"]);
                item.Email = dr["EmailAddress"].ToString();
                item.Date = dr["date"].ToString();
                item.user = dr["user"].ToString();                

                list.Add(item);
            }

            return list;
        }
    }

4 个答案:

答案 0 :(得分:1)

从Page类中提取该方法,因为它显然不应该存在,因为它似乎有不同的责任:

How do we determine an object's responsibility in OOP?

创建一个静态类并将该方法放在那里。

答案 1 :(得分:0)

使FillGrid方法保持静态。

答案 2 :(得分:0)

不是让方法从页面类中的db中获取数据并从其他类中调用它不是好事。如果您了解分层体系结构,则应将该方法移至数据访问层并从页面方法调用该方法,这将返回DataTable。

我希望它有道理:)

答案 3 :(得分:0)

我使用了Javascript中的PageMethods。这解决了我的问题。 谢谢你的所有答案。