如何从C#webmethod访问页面控件值

时间:2014-11-19 09:06:07

标签: c# asp.net ajax webmethod

我正在使用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。

请帮我解决这个问题,

1 个答案:

答案 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控件是如何制作的。它必须将数据放在某处,然后使用该数据创建行。不要将用户输入与控件进行比较,而是与用于填充控件的数据进行比较。

是的,这是更多的工作,因为您将不得不重构用于检索和填充控件的逻辑,但它也更加安全和快速,因为您不会依赖于整个代码隐藏的状态类进行数据验证。