不能在ASP中选择另一行.. NET GridView(第一个选择工作),因为__doPostBack脚本丢失

本文关键字:选择 工作 因为 doPostBack 脚本 第一个 一行 ASP NET 不能 GridView | 更新日期: 2023-09-27 18:02:16

我在ASP中有一个GridView的问题。NET web表单应用程序。基本上发生的事情是,我有代码通过单击来选择一行,这只在第一次单击时起作用。当单击其他行时,什么也没有发生,并且在浏览器控制台中我得到__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脚本。

不能在ASP中选择另一行.. NET GridView(第一个选择工作),因为__doPostBack脚本丢失

我想我不会知道为什么__doPostBack在改变行选择后没有被定义的原因,但现在的解决办法是"强制"以标准方式生成这个函数(很多人有各种潜在的原因这样做):

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

似乎某些罕见的情况会触发ASP中奇怪的bug。关于__doPostBack函数的。NET框架。