Выбранный элемент в списке пуст - PullRequest
3 голосов
/ 02 мая 2011

У меня есть несколько пунктов в списке.Когда я выбираю элемент, я сохраняю его в строке для дальнейшего использования, но когда я отображаю это строковое значение, оно отображается как ноль.

Ниже приведен код для моего файла Invitee.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Invitee.aspx.cs" Inherits="FinalProj2.Invitee" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:DropDownList ID="DropDownList1" runat="server">
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList2" runat="server">
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList3" runat="server">
        </asp:DropDownList>
&nbsp;&nbsp;&nbsp;&nbsp;
        <asp:DropDownList ID="DropDownList4" runat="server">
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList5" runat="server">
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList6" runat="server">
        </asp:DropDownList>

    </div>
    <asp:ListBox ID="ListBox1" runat="server" AutoPostBack="true" Height="310px" 
        onselectedindexchanged="ListBox1_SelectedIndexChanged" Width="271px">
    </asp:ListBox>
    <asp:TextBox ID="TextBox1" runat="server" Height="217px" Width="544px"></asp:TextBox>
    </form>
</body>
</html>

И код для Invitee.aspx.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace FinalProj2
{
    public partial class Invitee : System.Web.UI.Page
    {
        FinalProj2.Models.DataClasses1DataContext db = new FinalProj2.Models.DataClasses1DataContext();

        protected void Page_Load(object sender, EventArgs e)
        {

            for (int i = 1; i < 13; i++)
            {
                DropDownList1.Items.Add(new ListItem(i.ToString()));
                DropDownList4.Items.Add(new ListItem(i.ToString()));
            }

            for (int i = 1; i < 32; i++)
            {
                DropDownList2.Items.Add(new ListItem(i.ToString()));
                DropDownList5.Items.Add(new ListItem(i.ToString()));
            }

            for (int i = 2010; i < 2021; i++)
            {
                DropDownList3.Items.Add(new ListItem(i.ToString()));
                DropDownList6.Items.Add(new ListItem(i.ToString()));
            }


            var query = from emp in db.Employees
                        select emp.Employee_Name;

            ListBox1.DataSource = query;
            ListBox1.DataBind();
        }

        protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            Response.Write("Hello");

            string selected = ListBox1.SelectedValue.ToString();

            Response.Write("\n Selected Value is" + selected);

            var query = from emp in db.Employees
                        where emp.Employee_Name == selected
                        select emp.Employee_ID;

            Response.Write(query);

            //int empid = query.First();

            //var query1 = from meet_emp in db.Meet_Emps
            //             where meet_emp.Employee_ID == empid
            //             select meet_emp.Meeting_ID;

            //int meetid = query1.First();

            //Response.Write(meetid);
        }
    }
}

Значение строки «selected» равно нулю после того, как я выбрал элемент в списке.

Ответы [ 4 ]

7 голосов
/ 02 мая 2011

Это потому что вы запускаете ListBox1.DataBind() на каждом цикле.Изменить на:

if (!IsPostBack)
{
    var query = from emp in db.Employees
                select emp.Employee_Name;

    ListBox1.DataSource = query;
    ListBox1.DataBind();
}
6 голосов
/ 02 мая 2011

Вы должны добавить элемент списка при этом условии;!Page.IsPostBack.Поскольку перед вызовом выбранного события изменения индекса сначала происходит событие Page PostBack, и ваш выбор исчезнет.

if(!Page.IsPostBack)
{
for (int i = 1; i < 13; i++)
        {
            DropDownList1.Items.Add(new ListItem(i.ToString()));
            DropDownList4.Items.Add(new ListItem(i.ToString()));
        }

        for (int i = 1; i < 32; i++)
        {
            DropDownList2.Items.Add(new ListItem(i.ToString()));
            DropDownList5.Items.Add(new ListItem(i.ToString()));
        }

        for (int i = 2010; i < 2021; i++)
        {
            DropDownList3.Items.Add(new ListItem(i.ToString()));
            DropDownList6.Items.Add(new ListItem(i.ToString()));
        }


        var query = from emp in db.Employees
                    select emp.Employee_Name;

        ListBox1.DataSource = query;
        ListBox1.DataBind();
}
3 голосов
/ 02 мая 2011

Как видно из Обзор жизненного цикла страницы ASP.NET , сначала будет выполняться Page_Load, а затем событие SelectedIndexChanged.

Вам нужно выполнить код привязки DropDownList только один раз из-за ViewState. Остальные запросы будут PostBack. Поэтому вам нужно проверить добавление условия if (! Page.IsPostBack) .

И вам нужно определить DataValueField (какое поле ограниченного объекта будет значением) и DataTextField (какое поле объекта будет видно пользователю).

0 голосов
/ 17 февраля 2018
protected void Page_Load(object sender, EventArgs e) {    
   if(!IsPostBack)
   listBoxLoad();
}

Потому что ваш список autopostback=true и ваш список щелкнули, чтобы выполнить обратную передачу, и listBoxLoad снова перезагрузился, а индекс изменился.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...