Как получить выбранное значение в элементе управления FormView?

Я работаю с приложением, разработанным ASP.NET, проблема, с которой я сталкиваюсь, заключается в использовании элемента управления FormView, элемент управления FormView имеет ItemTemplate, InsertItemTemplate и EditItemTemplate.

Ниже приведен фрагмент кода InsertItemTemplate:

<asp:FormView ID="FormView1" runat="server" DefaultMode="ReadOnly">
    <InsertItemTemplate>
        <table cellpadding="0" cellspacing="0">
            <tr>
                <td>
                    <asp:Label id="lblPS" runat="server" Text="Process Status"></asp:Label>
                </td>
                <td>
                    <asp:DropDownList ID="ddlPS" runat="server"></asp:DropDownList>
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Label id="lblAP" runat="server" Text="Action Plan"></asp:Label>
                </td>
                <td>
                    <asp:TextBox id="txtAP" runat="server" Width="230px" TextMode="MultiLine" Rows="5"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <asp:Button ID="btnSubmit" runat="server" Text="Submit" onclick="btnSubmit_Click" />  
                </td>
            </tr>
        </table>
    </InsertItemTemplate>
</asp:FormView>

В событии Page_Load я выполняю привязку источника данных к DropDownList, как показано ниже:

FormView1.ChangeMode(FormViewMode.Insert);

DropDownList ddlPS = FormView1.FindControl("ddlPS") as DropDownList;
ddlPS.DataSource=GetProcessStatus();
ddlPS.DataBind();
ddlPS.Items.Insert(0, new System.Web.UI.WebControls.ListItem("- Please Select -", "- Please Select -"));

Привязка данных к DropDownList и «- Пожалуйста, выберите -» была в порядке.

Здесь возникает проблема, когда при нажатии кнопки «Отправить» я хотел получить выбранное пользователем значение DropDownList, но DropDownList.SelectedItem.Text всегда возвращает мне «- Пожалуйста, выберите -».

Посоветуйте, пожалуйста, как мне получить выбранное пользователем значение в InsertItemTemplate.


person sams5817    schedule 27.08.2012    source источник


Ответы (1)


Проблема заключается в событии DataBind на странице Load. Когда вы DataBind очищаете существующие значения и, следовательно, теряете выбранное значение.

Выпадающий список запоминает элементы в нем, поэтому вам не нужно использовать DataBind при каждой обратной передаче.

Ваш мог бы быть таким.

protected void Page_Load(object sender, EventArgs e)
{
  if(!IsPostBack)
  {
    DropDownList ddlPS = FormView1.FindControl("ddlPS") as DropDownList;
    ddlPS.DataSource=GetProcessStatus();
    ddlPS.DataBind();
    ddlPS.Items.Insert(0, new System.Web.UI.WebControls.ListItem("- Please Select -", "- Please Select -"));
  }
}
person nunespascal    schedule 27.08.2012