2017-07-28 2 views
0

私はこの時点でハードコードされたチェックボックスとテキストボックスをたくさん持っています。ビジネスルールによると、チェックボックスの選択は保存される必要があります。また、ポストバックやページの更新時に、選択を維持する必要があります。私の場合、値をデータベースに保存できますが、ポストバック。誰かがこれを処理するための例を私に提供することはできますか?私はこれを行うためにloadメソッドを書く必要があると思います。誰かが私に例を教えてくれますか?チェックボックスの値を読み込んで、asp.net webformsのポストバックにそれらを保持する方法

コード:背後

<div id="collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo"> 
    <div class="panel-body"> 
     <div class="col-md-4"> 
      <div class="form-group"> 
       <div class="check"> 
        <asp:CheckBox runat="server" ID="chkRS" Text="RS" /> 
       </div> 

       <br /> 

       <asp:CheckBox runat="server" ID="chkSC" Text="SSC" /> 

       <br /> 

       <asp:CheckBox runat="server" ID="SCR" Text="SCR" /> 

       <br /> 

       <asp:Label runat="server" AssociatedControlID="txtPrint">Print Button Class</asp:Label> 
       <asp:TextBox runat="server" ID="txtPrint" CssClass="form-control"></asp:TextBox> 

      </div> 
     </div> 
    </div> 
</div> 

コード:ポストバックと非ポストバックの間

protected void Page_Load(object sender, EventArgs e) 
     { 

      InitializeSurveys(); 

      if (IsPostBack) return; 

      _projectContext.SelectedSurvey = null; 


     } 


private void LoadSurvey(Survey survey) 
     { 
      ViewState["surveyId"] = survey.SurveyID; 
      txtTitle.Text = survey.Name; 

      chkActive.Checked = survey.Active;   

      //ddlSurveyType.SelectedValue = survey.Type; 
      //TODO: There is no need for this setting 
      ddlRespondentType.SelectedValue = survey.RespondentType.ToString(); 
      lstLanguages.Visible = false; 
      lblMultipleText.Visible = false; 
      lblLanguages.Visible = true; 
      ddlLanguages.Enabled = false; 
      lblLanguages.Text = ""; 
      survey.SurveyLanguages 
       .Select(s => s.Language.LanguageName) 
       .ToList().ForEach(sl => lblLanguages.Text += "<br>" + sl); 
      ddlLanguages.SelectedValue = survey.DefaultLanguageID.ToString(); 
      txtKeywords.Text = survey.Keywords; 

      ddlGroup.SelectedValue = survey.GroupId == null ? "-1" : survey.GroupId.ToString(); 
      lblUniqueCode.Text = [email protected]"Code<br><div style=""border: solid 1px #ccc; background-color: #eee;padding: 7px;"">{survey.Code}</div>"; 

     } 


protected void lnkSave_Click(object sender, EventArgs e) 
     { 
      var id = ViewState["surveyId"] != null 
       ? long.Parse(ViewState["surveyId"].ToString()) 
       : 0; 

      var survey = ViewState["surveyId"] != null 
       ? _surveyRepo.GetSurveys().Include(s => s.ReportingGroups).Include(s => s.SurveySettings).Single(s => s.SurveyID == id) 
       : new Survey(); 
      var ss = new List<Ss>();   

      foreach (var item in g.ss) 
      { 
       var setting = s.ss.FirstOrDefault(s => s.Key == item.Key); 
       WebControl ctrl = GetControl(item.Key.ToString()); 
       if (ctrl == null) continue; 
       if (setting == null) 
       { 
        setting = new SurveySetting() 
        { 
         SurveyId = id, 
         Key = item.Key 
        }; 
       } 

       if (ctrl is CheckBox) 
       { 
        setting.Value = ((CheckBox)(ctrl)).Checked.ToString(); 
       } 
       else 
       { 
        setting.Value = ((TextBox)(ctrl)).Text; 
       } 

       surveySettings.Add(setting); 

      } 

      foreach (var temp in surveySettings) 
      { 
       if (!survey.SurveySettings.Any(ss => ss.Key == temp.Key)) 
       { 
        _surveyRepo.AddSurveySetting(temp); 
       } 
      } 



      _sRepo.Save(); 


      ClearForm(); 

      InitializeSurveys(); 
      LoadDropDown(); 
      LoadSurveys(); 
      upAddUpdate.Update(); 
      upMain.Update(); 
      CloseModalOnUpdate("close_on_edit", "#NewSurveyModal"); 
     } 
+0

高レベルでは、ページの「ポストバック」と「初期ロード」を区別したい場合があります。最初の読み込み時には、現在行っていることをやりたいのですが、ポストバックでは、ユーザーが入力したデータを保持したり変更したりする方法とは異なる方法で初期化する必要があります。 –

+0

ページの更新時に値を保持するのはなぜですか?新しいユーザーがサイトに初めて来た場合、その場合はどうしますか? – CodingYoshi

+0

コードをご提示ください。 – Win

答えて

0

分化します。そうしないと、実際のポストバック状態にかかわらず、ページがどのようにセットアップされているかに応じて、ページがロードされるたびにフィールドが初期値に初期化される可能性があります。

using System; 

namespace PersistingCheckboxes_45379633 
{ 
    public partial class Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (IsPostBack) 
      { 
       /* 
       * This is a postback, therefore I want to populate the page according to what's in the database 
       */ 
       txtbx_1.Text = "postback"; 
       chkbx_item1.Checked = WhatDoesTheDBSay(1); 
       chkbx_item2.Checked = WhatDoesTheDBSay(2); 
      } 
      else 
      { 
       /* 
       * This is not a postback, so we initialize the fields 
       */ 
       txtbx_1.Text = "not a postback"; 
       chkbx_item1.Checked = false; 
      } 
     } 

     private bool WhatDoesTheDBSay(int fieldID) 
     { 
      if (fieldID == 1) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 


    } 
} 

について初期化メソッドにポストバック状態を渡し、私のコメントをフォローアップ。

using System; 

namespace PersistingCheckboxes_45379633 
{ 
    public partial class Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (IsPostBack) 
      { 
       //initialize taking Postback into account 
       InitializeSurveys(true); 
      } 
      else 
      { 
       //initialize without postback 
       InitializeSurveys(false); 
      } 
     } 

     private void InitializeSurveys(bool IsItAPostBack) 
     { 
      if (IsItAPostBack) 
      { 
       /* 
       * This is a postback, therefore I want to populate the page according to what's in the database 
       */ 
       txtbx_1.Text = "postback"; 
       chkbx_item1.Checked = WhatDoesTheDBSay(1); 
       chkbx_item2.Checked = WhatDoesTheDBSay(2); 
      } 
      else 
      { 
       /* 
       * This is not a postback, so we initialize the fields 
       */ 
       txtbx_1.Text = "not a postback"; 
       chkbx_item1.Checked = false; 
      } 
     } 

     private bool WhatDoesTheDBSay(int fieldID) 
     { 
      if (fieldID == 1) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 


    } 
} 
+0

私は編集に関連コードを投稿しました。 – user3147594

+0

あなたのコードを試しましたが、私のシナリオではうまくいかなかった – user3147594

関連する問題