項目中在UpdatePanel範圍内加入了一個GridView控件。
如果此頁面初始化有資料時,分頁效果一切正常。
但是當初始化時沒有資料,頁面中點選按鈕加載資料後,再點分頁數字時報異常:“Microsoft JScript 運作時錯誤: 缺少對象”
經多方請教,幾經周折後,終于搞定這個問題。
病因:
加入UpdatePanel後,gridview綁定資料屬于局部重新整理,有些js便沒有注冊到頁面對象中,是以會出現js錯誤。
解決辦法:
1 設定GridView的OnPageIndexChanging事件,在C#背景寫入擷取新頁面索引,綁定資料的代碼。
例如:

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataSource = getDt();
GridView1.DataBind();
}
2 前台UpdatePanel内給Gridview綁定資料的按鈕中,設定屬性:PostBackUrl="~/Default.aspx" 。後面的網頁寫入目前網頁的名稱

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" PostBackUrl="~/Default.aspx" />
示例代碼
前台ASPX:
<%
@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

@ Register Assembly="C1.Web.C1WebGrid.2" Namespace="C1.Web.C1WebGrid" TagPrefix="C1WebGrid" %>

@ Register Assembly="Microsoft.Web.Atlas" Namespace="Microsoft.Web.UI" TagPrefix="cc1" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>無标題頁</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<cc1:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True">

<ErrorTemplate>

<div style="padding: 12px; width: 400px; height: 140px; border: #000000 1px solid;

background-color: white; text-align: left">

An error has occurred:<br />

<span id="errorMessageLabel" runat="server"></span>

<br />


<input id="okButton" runat="server" type="button" value="OK" />


</ErrorTemplate>

</cc1:ScriptManager>

&nbsp;</div>

<cc1:UpdatePanel ID="UpdatePanel1" runat="server">

<ContentTemplate>

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" PostBackUrl="~/Default.aspx" />

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" OnPageIndexChanging="GridView1_PageIndexChanging">

<Columns>

<asp:TemplateField>

<ItemTemplate>

<asp:TextBox ID="TextBox1" runat="server" Text=<%# Eval("id") %>></asp:TextBox>

</ItemTemplate>

</asp:TemplateField>



<asp:TextBox ID="TextBox2" runat="server" Text=<%# Eval("name") %>></asp:TextBox>



<asp:BoundField DataField="name" />

</Columns>

</asp:GridView>

</ContentTemplate>

</cc1:UpdatePanel>

</div>

</form>

</body>

</html>

背景CS:

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;


public partial class _Default : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
if (!IsPostBack)
//this.GridView1.DataSource = this.getDt();
//this.GridView1.DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
this.GridView1.DataSource = this.getDt();
this.GridView1.DataBind();
private DataTable getDt()
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("name");
DataRow dr = null;
for (int i = 0; i < 20; i++)
dr = dt.NewRow();
dr["id"] = i.ToString();
dr["name"] = "名字" + i.ToString();
dt.Rows.Add(dr);
return dt;
}
