在我的应用程序中,我们有一个aspx页面frmwebform1
。
此页面有一个静态方法GetmyData()
,它调用帮助程序类HelperClass
但代码的问题在于,当我们调用方法GetHelperData()
时,在此
helper类它实例化frmwebform1
以获取其方法FillGrid()
。
问题是当它实例化frmwebform1
时,我们正在丢失entityId
和entityType
值。
有没有办法在没有实例化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;
}
}
答案 0 :(得分:1)
从Page类中提取该方法,因为它显然不应该存在,因为它似乎有不同的责任:
How do we determine an object's responsibility in OOP?
创建一个静态类并将该方法放在那里。
答案 1 :(得分:0)
使FillGrid方法保持静态。
答案 2 :(得分:0)
不是让方法从页面类中的db中获取数据并从其他类中调用它不是好事。如果您了解分层体系结构,则应将该方法移至数据访问层并从页面方法调用该方法,这将返回DataTable。
我希望它有道理:)
答案 3 :(得分:0)
我使用了Javascript中的PageMethods。这解决了我的问题。 谢谢你的所有答案。