我正在使用C#asp.net Web表单应用程序。我正在使用这个页面的asp网格视图控件。一旦我用C#web方法添加一些ajax方法来捕获网页中的一些数据。 在这个C#web方法中,我无法捕获网格视图记录。它始终显示为null。如何在Web方法中获取此记录。
这是我的代码:
[WebMethod]
public bool ValidateGrid(string RowIndex, string CellIndex)
{
HomeDefault pageMethods = new HomeDefault();
pageMethods.ValidateGridViewControls(Convert.ToInt32(RowIndex), Convert.ToInt32(CellIndex));
return true;
}
private void ValidateGridViewControls(int RowIndex, int CellIndex)
{
foreach (GridViewRow row in grvProgram.Rows)
{
}
}
在这种情况下,grvProgram.Rows是alaways null。
请帮我解决这个问题,
答案 0 :(得分:0)
您当前的实施会遇到两个问题:
1)正如Zaki在评论中指出的那样,[WebMethod]
应该是
public static bool ValidateGrid(string RowIndex, string CellIndex)
2)我怀疑HomeDefault pageMethods = new HomeDefault();
是你的aspx页面代码隐藏类。当asp.net创建HomeDefault
类时,它不仅会调用new HomeDefault()
。事实上,它为它做了许多疯狂的魔法事情,以便该类可以访问HttpContext,以及回传信息(如果存在)。这就是你打电话的原因
yourPage.grvProgram.property
grvProgram
为空。这是因为该类的构造函数没有成功,asp.net通过InitializeComponent
等其他方法实现它。不要自己调用这些方法,它们可能会产生意想不到的副作用或.net或IIS管道中的依赖项。
如何解决这个问题?
了解您的grvProgram
控件是如何制作的。它必须将数据放在某处,然后使用该数据创建行。不要将用户输入与控件进行比较,而是与用于填充控件的数据进行比较。
是的,这是更多的工作,因为您将不得不重构用于检索和填充控件的逻辑,但它也更加安全和快速,因为您不会依赖于整个代码隐藏的状态类进行数据验证。