C# 如何从WebC方法访问页控件值

C# 如何从WebC方法访问页控件值,c#,asp.net,ajax,webmethod,C#,Asp.net,Ajax,Webmethod,我正在使用C asp.net web表单应用程序。我将asp网格视图控件用于此页面。有一次,我用cweb方法添加了一些ajax方法来捕获web页面中的一些数据。 在这个C web方法中,我无法捕获网格视图记录。它总是空的。如何在web方法中获取此记录 这是我的代码: [WebMethod] public bool ValidateGrid(string RowIndex, string CellIndex) { HomeDefault pageMethods = new HomeDefa

我正在使用C asp.net web表单应用程序。我将asp网格视图控件用于此页面。有一次,我用cweb方法添加了一些ajax方法来捕获web页面中的一些数据。 在这个C web方法中,我无法捕获网格视图记录。它总是空的。如何在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始终为空


请帮助我解决这个问题,

您当前的实施将遇到两个问题:

1正如Zaki在评论中指出的,[WebMethod]应该是

公共静态bool ValidateGridstring行索引、字符串单元格索引

2我怀疑HomeDefault pageMethods=新的HomeDefault;是您的aspx页面代码隐藏类。当asp.net创建HomeDefault类时,它不仅调用新的HomeDefault。事实上,它对它做了很多不可思议的事情,这样类就可以访问HttpContext以及回发信息(如果有的话)。这就是你打电话的原因

yourPage.grvProgram.property

grvProgram为空。这是因为该类的构造函数没有实现它,asp.net通过其他方法(如InitializeComponent等)实现。不要自己调用这些方法,它们可能会在.net或IIS管道中产生意外的副作用或依赖项

那怎么解决呢

看看grvProgram控件是如何制作的。它必须将数据放在那里的某个地方,然后使用该数据创建行。与用于填充控件的数据进行比较,而不是将用户输入与控件进行比较


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

WebMethods在从ajax调用时需要是静态的,在静态方法中,您没有访问此/控件的权限。您可以将值作为数据从ajax传递。