asp net dropdown selectedvalue / selectedindex不在转发器中更新

时间:2017-02-13 10:33:24

标签: c# asp.net webforms repeater dropdown

所以我有这些下拉列表,当用户更改它的值时我需要更新。问题是无论我尝试多少,价值仍然是相同的。有什么问题?

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 个答案:

答案 0 :(得分:1)

是的,每次请求进入服务器时,您都会绑定转发器。不要这样做: -

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

回发时不会绑定转发器,您的实际选定值将被保留。