none
無法動態載入Viewstate ? RRS feed

  • 問題

  •  

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

    ----
    這個有解嗎?

    2008年4月2日 上午 07:44

解答

  • 你要「解」什麼?

     

    這是一段「描述」,不是「問題」吧。

     

    ViewState 是 ASP.NET 的架構,有其邏輯與限制,你當然無法改。


    ----
    From: Will
    Blog: http://blog.miniasp.com/
    記載著 Will 在網路世界的學習心得與技術分享

    2008年4月2日 上午 08:19
  • 把判斷條件

    提出來
    在引用控制項的頁面裡
    寫判斷

    目前看起來OK了?

    也就是
    在自動控制項裡
    protected void FormView1_DataBound(object sender, EventArgs e)
    之中

    加上記錄 ViewState["FeedBackID"]
    然後在控制項加上

    Code Snippet
     public string FeedBackID
     {
      get
      {
       string strFeedBackID = "0";
       try
       {
        strFeedBackID = ViewState["FeedBackID"].ToString();
       }
       catch
       {
        strFeedBackID = "0";
       }
       return strFeedBackID;
      }
     }

     

     

    然後在引用的頁面中
    protected void FormViewDetail_DataBound(object sender, EventArgs e)
    做判斷

    2008年4月2日 上午 09:03

所有回覆

  • 你要「解」什麼?

     

    這是一段「描述」,不是「問題」吧。

     

    ViewState 是 ASP.NET 的架構,有其邏輯與限制,你當然無法改。


    ----
    From: Will
    Blog: http://blog.miniasp.com/
    記載著 Will 在網路世界的學習心得與技術分享

    2008年4月2日 上午 08:19
  • 1.我有一個自訂控制項
    用這樣來記 FromView1 是 編輯模式還是 唯讀模式

    Code Snippet

    public bool ReadOnly
     {
      get
      {
       bool IsReadOnly = true;
       try
       {
        IsReadOnly = bool.Parse(ViewState["ReadOnly"].ToString());
       }
       catch
       {
        IsReadOnly = true;
       }
       return IsReadOnly;
      }
      set
      {
       bool IsReadOnly = value;
       ViewState["ReadOnly"] = value;

       if (IsReadOnly == true)
       {
        this.FormView1.ChangeMode(FormViewMode.ReadOnly);
       }
       else
       {
        this.FormView1.Visible = true; //必需
        this.FormView1.ChangeMode(FormViewMode.Edit);
       }
      }
     }

     

     

     

    2.然後, 突然增加新的需求

    Code Snippet


     protected void FormView1_DataBound(object sender, EventArgs e)
     {
      bool IsReadOnly = true;
      try
      {
       IsReadOnly = bool.Parse(ViewState["ReadOnly"].ToString());
      }
      catch
      {
       IsReadOnly = true;
      }

      if (IsReadOnly == true)
      {
       if (((Label)((FormView)sender).FindControl("LabelFeedBackID")).Text == "0")
       {
        this.FormView1.Visible = false;
       }
      }
      else
      {
       this.FormView1.Visible = true;
       if (((Label)((FormView)sender).FindControl("LabelFeedBackID")).Text == "0")
       {
        //新增
       }
       else
       {
        //不修改
        //this.ReadOnly = true;
        ((FormView)sender).ChangeMode(FormViewMode.ReadOnly);
       }
       
      }
     }

     

    3.以及在引用這個自定控制項的頁面

    Code Snippet

    protected void FormViewDetail_DataBound(object sender, EventArgs e)
     {
      VoteResultControl VoteResultControl1 = (VoteResultControl)((FormView)sender).FindControl("VoteResultControl1");
      if (VoteResultControl1 != null)
      {
       if (((Label)((FormView)sender).FindControl("LabelStatusID")).Text == "5")
       {
        VoteResultControl1.Visible = true;
        if (VoteResultControl1.ReadOnly == true)
         ((Button)((FormView)sender).FindControl("Button_UpdateVR")).Visible = false;
        else
         ((Button)((FormView)sender).FindControl("Button_UpdateVR")).Visible = true;
       }
       else
       {
        VoteResultControl1.Visible = false;
        ((Button)((FormView)sender).FindControl("Button_UpdateVR")).Visible = false;

       }
      }
     }


     protected void Button_UpdateVR_Click(object sender, EventArgs e)
     {
      try
      {
       VoteResultControl VoteResultControl1 = (VoteResultControl)this.FormViewDetail.FindControl("VoteResultControl1");
       if (VoteResultControl1 != null)
       {
        try
        {
         VoteResultControl1.UpdateData();
        }
        catch
        {
        }

        ((Button)this.FormViewDetail.FindControl("Button_UpdateVR")).Visible = false;
        this.Panel_Browse.Visible = true;
        this.Panel_Detail.Visible = false;
        this.Panel_Create.Visible = false;
        this.Panel_Engineer.Visible = false;

        /*this.strSearchKey = this.TextBox_SearchKey.Text.Trim();
        if (this.strSearchKey.Length > 0)
        {
         this.workMode = PageWorkMode.Query;
        }
        else
        {
         this.workMode = PageWorkMode.Browse;
        }
        SetPageTitle();
        Update_GirdView();
         */
       }
      }
      catch
      {
      }
     }

     

     


    Button_UpdateVR_Click 跑完
    ASP.NET必掛 (IE重新整理也無校)
    就是上面的錯誤訊息

    2008年4月2日 上午 08:30
  • 問題看起來出在
    GridView1_RowDataBound 裡的
    ((FormView)sender).ChangeMode(FormViewMode.ReadOnly);

     

    這樣會變成無限循還嗎?

    2008年4月2日 上午 08:39
  • 如果有無限循環的話你的電腦可能已經當了,不然就可能會出現 Exception 畫面。

     

    你的程式邏輯是蠻怪的,你可以思考一下看有沒有其他方式可以寫。

     

    2008年4月2日 上午 08:45
  • 把判斷條件

    提出來
    在引用控制項的頁面裡
    寫判斷

    目前看起來OK了?

    也就是
    在自動控制項裡
    protected void FormView1_DataBound(object sender, EventArgs e)
    之中

    加上記錄 ViewState["FeedBackID"]
    然後在控制項加上

    Code Snippet
     public string FeedBackID
     {
      get
      {
       string strFeedBackID = "0";
       try
       {
        strFeedBackID = ViewState["FeedBackID"].ToString();
       }
       catch
       {
        strFeedBackID = "0";
       }
       return strFeedBackID;
      }
     }

     

     

    然後在引用的頁面中
    protected void FormViewDetail_DataBound(object sender, EventArgs e)
    做判斷

    2008年4月2日 上午 09:03