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は同じですが、誰にも示唆がありますか?
これは確実ですが、私が連絡先を更新すると、誰が選択したとしても同じユーザーが更新されます。どうして? – Malphai
@Malphai - 私はよくわかりません連絡先をどのように更新していますか、コードをデバッグして何が起こっているのか確認してください。それがあなたの問題を解決する最善の方法です。あなたが困っているなら私に知らせてください。 –
私が得たIDは正しいですか(私のコマンド引数を介して)何らかの理由で、後でrptdatabindに戻っても同じ連絡先を更新しますか? – Malphai