2017-02-13 8 views
0

このようなドロップダウンリストは、ユーザーが値を変更したときに更新する必要があります。問題は、私がどれだけ試しても、値は同じであるということです。何が問題ですか?asp net dropdown selectedvalue/selectedindexがリピータで更新されない

ASPX:

 <asp:Repeater runat="server" OnItemCommand="rptList_OnItemCommand" ID="rptList"> 
    <td> 
<ItemTemplate> 
         <asp:LinkButton CommandName="selectBtn" ToolTip="TRNSLTEdit" ID="btnEdit" CssClass="editOperator" runat="server" CommandArgument='<%# Eval("ID")%>' OnClientClick="return PopupEdit(this)"> 
          <asp:Image ImageUrl="Images/Icons/Edit-16x16.png" ID="EditVisitor" runat="server" /> 
         </asp:LinkButton> 
         <div id="modalEdit" class="modal"> 
          <div class="modal-content"> 
           <p style="margin-left: 50px;"> 
            <img src="Images/Icons/Sip.png" alt="" /> 
            <%# Eval("FirstName") %> <%# Eval("SurName") %> 
           </p> 
           <br /> 
           <asp:DropDownList CssClass="ddlNodeClass" runat="server" ID="ddlNodeEdit" /> 
           <asp:DropDownList CssClass="ddlTranslatorClass" runat="server" ID="ddlTranslatorEdit" /> 
           <asp:LinkButton ToolTip="TRNSLTCancel" CommandArgument='<%# Eval("ID") %>' ID="btnNo" runat="server" CssClass="btnCancelClass" OnClientClick="return Cancel(this)"> 
            <asp:Image ImageUrl="Images/Icons/Cancel-22x22.png" ID="SaveContact" runat="server" ClientIDMode="Static" /> 
           </asp:LinkButton> 
           <asp:LinkButton ToolTip="TRNSLTSave" CommandName="submitBtn" CommandArgument='<%# Eval("ID") %>' ID="btnYes" runat="server" CssClass="btnSaveClass"> 
            <asp:Image ImageUrl="Images/Icons/Check-22x22.png" ID="SaveOperator" runat="server" ClientIDMode="Static" /> 
           </asp:LinkButton> 
          </div> 
         </div> 
        </td> 
     </ItemTemplate> 
</asp:Repeater> 

C#(aspx.cs):

protected void Page_Load(object sender, EventArgs e) 
{ 
    RptDataBind(); 
} 

/// <summary> 
/// Assigning commands to listing repeater. 
/// </summary> 
protected void rptList_OnItemCommand(object source, RepeaterCommandEventArgs e) 
{ 
    var tellusUserId = TellusUser.UserID; 
    var operatorId = Convert.ToInt64(e.CommandArgument); 

    switch (e.CommandName) 
    { 
     case "submitBtn": 
      var ddlNodeEdit = (DropDownList)e.Item.FindControl("ddlNodeEdit"); 
      var ddlTranslatorEdit = (DropDownList)e.Item.FindControl("ddlTranslatorEdit"); 
      ViewState["NodeIndex"] = ddlNodeEdit.SelectedIndex; //Still old value 
      ViewState["TranslatorValue"] = ddlTranslatorEdit.SelectedValue; //Still old value 
      _administrationSystem.UpdateOperator(tellusUserId, operatorId, TellusUser.UserID, Convert.ToInt32(ViewState["NodeIndex"]), Convert.ToInt64(ViewState["TranslatorValue"]), ""); 
      ViewState["ID"] = operatorId; 
      break; 
    } 
} 

/// <summary> 
/// Sets datasource and databind to aspx page. 
/// </summary> 
public void RptDataBind() 
{ 
    var userId = TellusUser.UserID; 

    _administrationSystem = new Administration(); 
    _phonesSystem = new Phones(); 

    var operatorInfo = _administrationSystem.GetOperatorsInformation(userId); 

    rptList.DataSource = operatorInfo; 
    rptList.DataBind(); 

    if (rptList.Items.Count > 0) 
    { 
     for (var count = 0; count < rptList.Items.Count; count++) 
     { 
      var ddlNodeEdit = (DropDownList)rptList.Items[count].FindControl("ddlNodeEdit"); 
      var ddlTranslatorEdit = (DropDownList)rptList.Items[count].FindControl("ddlTranslatorEdit"); 

      var getNode = _administrationSystem.GetNode(userId, ddlNodeEdit.SelectedIndex + 1); //DataSet from DB 
      var getTranslator = _phonesSystem.GetPhoneNumberTranslator(ddlTranslatorEdit.SelectedIndex); //DataSet from DB 

      ddlNodeEdit.DataSource = getNode; 
      ddlNodeEdit.DataTextField = "NodeName"; 
      ddlNodeEdit.DataValueField = "ID"; 

      ddlTranslatorEdit.DataSource = getTranslator; 
      ddlTranslatorEdit.DataTextField = "Description"; 
      ddlTranslatorEdit.DataValueField = "ID"; 

      ddlNodeEdit.DataBind(); 
      ddlTranslatorEdit.DataBind(); 

      ViewState["NodeIndex"] = ddlNodeEdit.SelectedIndex; 
      ViewState["TranslatorValue"] = ddlTranslatorEdit.SelectedValue; 
     } 
    } 
} 

ので、いくつかの理由があります。デバッグ時に別の値に変更した場合でも、ドロップダウンリストのselectedvalueとselectedindexは同じですが、誰にも示唆がありますか?

答えて

1

はい、要求がサーバーに送信されるたびにリピーターをバインドしています。 -

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
    { 
     RptDataBind(); 
    } 
} 

ポストバック時にリピーターをバインドしないで、実際に選択した値が保持されます。

+0

これは確実ですが、私が連絡先を更新すると、誰が選択したとしても同じユーザーが更新されます。どうして? – Malphai

+0

@Malphai - 私はよくわかりません連絡先をどのように更新していますか、コードをデバッグして何が起こっているのか確認してください。それがあなたの問題を解決する最善の方法です。あなたが困っているなら私に知らせてください。 –

+0

私が得たIDは正しいですか(私のコマンド引数を介して)何らかの理由で、後でrptdatabindに戻っても同じ連絡先を更新しますか? – Malphai

関連する問題