在不实例化网页的情况下调用网页的方法
本文关键字:网页 调用 方法 情况下 实例化 | 更新日期: 2023-09-27 18:06:41
在我的应用程序中,我们有一个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;
}
}
从Page类中提取该方法,因为它显然不应该存在,因为它似乎有不同的职责:
在OOP中我们如何确定对象的职责?
创建一个静态类,并把这个方法放在那里
设置FillGrid方法为静态
而不是在page类中从db获取数据并从其他类调用它的方法是不好的。如果你知道分层架构,你应该将该方法移动到数据访问层,并从page方法调用该方法,这将返回给你DataTable。
我希望这是有意义的:)
我使用了Javascript中的PageMethods。这就解决了我的问题。谢谢你的回答。