2020年12月28日 星期一

[研究][ASP.NET]無法載入 Viewstate。Viewstate 所要載入的控制項樹狀結構必須符合在先前要求期間用來儲存 Viewstate 的控制項樹狀結構。

[研究][ASP.NET]無法載入 Viewstate。Viewstate 所要載入的控制項樹狀結構必須符合在先前要求期間用來儲存 Viewstate 的控制項樹狀結構。

2020-12-28

Visual Studio 2019 v16.8.3 + .NET Framework 4.7.2 + ASP.NET + WebForm

無法載入 Viewstate。Viewstate 所要載入的控制項樹狀結構必須符合在先前要求期間用來儲存 Viewstate 的控制項樹狀結構。例如,以動態方式加入控制項時,在回傳期間加入的控制項必須符合在初始要求期間所加入控制項的型別和位置。

(下圖) Click 圖片可看 100% 原始尺寸


其中

<asp:GridView ID="GridView1"... (略)
    <Columns>
        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:LinkButton ID="LinkButton5" runat="server" CausesValidation="False" 
   		            CommandName="Edit2" Text="修改" 
					CommandArgument='<%# Eval("SN") %>' CssClass="btn btn-primary btn-xs"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Edit2")
    {
        PlaceHolder1.Visible = false;
        GridView1.Visible = false;
		
        string id = e.CommandArgument.ToString();
        SqlDataSource2.SelectParameters["SN"].DefaultValue = id;
        
        DetailsView1.Visible = true;
        DetailsView1.Caption = "編輯";
        DetailsView1.ChangeMode(DetailsViewMode.Edit);
    }
}

研究後,將

protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
{
    PlaceHolder1.Visible = true;    // 新增按鈕
    GridView1.Visible = true;       // 列表畫面
    DetailsView1.Visible = false;   // 關閉 新增/修改 用的畫面

    // 更新 GridView1
    GridView1.DataSourceID = "";
    GridView1.DataSourceID = "SqlDataSource1";
    GridView1.DataBind();
}

改為

protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
{
    Response.Redirect(Request.RawUrl);
    //Response.Redirect(Request.Url.PathAndQuery);
}

解決。

(完)


沒有留言:

張貼留言