C# 在不实例化网页的情况下调用网页的方法
在我的应用程序中,我们有一个aspx页面C# 在不实例化网页的情况下调用网页的方法,c#,asp.net,webforms,C#,Asp.net,Webforms,在我的应用程序中,我们有一个aspx页面frmwebform1。 此页面有一个静态方法GetmyData(),它调用一个helper类HelperClass 但是代码的问题是,当我们调用方法GetHelperData(),在 它实例化frmwebform1以获取其方法FillGrid()。 问题是当它实例化frmwebform1时,我们失去了entityId和entityType值 是否有任何方法可以调用方法FillGrid(),而无需实例化frmwebform1页面。不幸的是,我无法将Fill
frmwebform1
。
此页面有一个静态方法GetmyData()
,它调用一个helper类HelperClass
但是代码的问题是,当我们调用方法GetHelperData()
,在
它实例化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;
}
}
//frmwebform1.aspx.cs
公共部分类frmwebform1:System.Web.UI.Page
{
字符串entityId;
字符串实体类型;
受保护的无效页面加载(对象发送方、事件参数e)
{
if(Request.QueryString[“entityId”!=null)
{
entityType=Request.QueryString[“entityType”].ToString().ToUpper();
entityId=Request.QueryString[“entityId”].ToString();
}
如果(!IsPostBack)
{
grdMygrid.DataSource=FillGrid();
grdMygrid.DataBind();
}
}
公共数据表FillGrid()
{
string server=HttpContext.Current.Session[“server”].ToString();
string database=HttpContext.Current.Session[“database”].ToString();
字符串usrID=HttpContext.Current.Session[“user_ID”].ToString();
Data tr=新的getData(服务器、数据库、usrID);
DataTable dt=tr.GetAllenties(entityId);
返回dt;
}
[WebMethod]//AJAX页面方法
公共静态列表GetmyData()
{
HelperClass helper=新的HelperClass();
返回helper.GetHelperData();
}
}
//二等舱
公共类助手类
{
公共列表GetHelperData()
{
frmwebform1 form1=新frmwebform1();
DataTable dt=form1.FillGrid();
列表=新列表();
第1类项目;
foreach(数据行dr在dt.行中)
{
item=新的TaxHistory();
item.txr\u guid=dr[“txr\u guid”].ToString();
item.Amount=string.Format(“{0}”,dr[“Amount”]);
item.Email=dr[“EmailAddress”].ToString();
item.Date=dr[“Date”].ToString();
item.user=dr[“user”].ToString();
列表。添加(项目);
}
退货清单;
}
}
将FillGrid方法设置为静态。从Page类中提取该方法,因为它显然不应该存在,因为它似乎有不同的职责:
创建一个静态类并将该方法放在那里。而不是让方法从page类中的db获取数据并从其他类调用它,这不是一件好事。若您了解分层体系结构,那个么应该将该方法移动到数据访问层,并从page方法调用该方法,该方法将返回DataTable
我希望它有意义:)我使用了Javascript中的PageMethods。解决了我的问题。
谢谢你的回答。实际上,FillGrid方法是静态方法。但由于一些数据泄露,我们将此方法更改为非静态方法。请告知其他建议。