无法在ASP.NET GridView中选择另一行(首选工作),因为缺少__doPostBack脚本

时间:2014-05-08 13:28:39

标签: c# asp.net gridview webforms

我在ASP.NET Web窗体应用程序中遇到GridView的问题。基本上会发生的事情是我有代码通过点击它来选择一行,这只是第一次点击。点击其他行时没有任何反应,在浏览器控制台中我收到__doPostBack is undefined错误。

允许行选择的代码主要基于处理OnRowDataBound事件,在我的情况下看起来像这样:

protected void gvUsers_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackEventReference(gvUsers, "Select$" + e.Row.RowIndex);
    }
}

以下是我在选择更改事件处理程序中所做的事情:

protected void gvUsers_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
    GridViewRow row = gvUsers.Rows[e.NewSelectedIndex];
    row.CssClass = "selectedUser";
}

真的没什么特别的。这适用于很多人。但是当我在处理此事件后检查服务器返回的HTML时,确实缺少__doPostBack脚本,以及它使用的两个隐藏的input

1 个答案:

答案 0 :(得分:1)

我想我很快就知道在更改行选择之后未定义__doPostBack的原因,但现在的解决方法是强制使用'强制'以标准方式生成此功能(许多人有各种潜在的原因来执行此操作):

protected void Page_Load(object sender, EventArgs e)
{
    Page.ClientScript.GetPostBackEventReference(gvUsers, "");

    //other logic
}

似乎某些罕见情况会在ASP.NET框架中触发有关__doPostBack函数的奇怪错误。