2017-04-23 54 views
0

我一直在爲這個問題摔跤數天,到目前爲止我還沒有找到適合這個特定問題的答案。下面是加載在pageLoad的()列表中的代碼:ASP.NET-SelectedValue/Indexbox在回發後總是發生變化

protected void Page_Load(object sender, EventArgs e) 
     {   
      if(!IsPostBack) 
      {     
       lstEmprendimientos.DataSource = Emprendimiento.DevolverEmprendimientosConEvaluacionesIncompletas(); 
       lstEmprendimientos.DataValueField = "id"; 
       lstEmprendimientos.DataTextField = "titulo"; 
       lstEmprendimientos.DataBind(); 
       pnlEvaluador.Visible = false;  
      } 
     } 

第一種方法加載由「Emprendimiento」對象的列表,並在該名單的SelectedIndexChanged我調用另一個方法通過一個方法來加載列表使用所選項目的SelectedValue。

我的問題是,無論我做什麼,SelectedIndex總是在回發後重置爲0,所以我無法正確加載使用SelectedValue的第二個列表。我已經使用了很長一段時間的列表,而且我從來沒有遇到過這個問題,所以這真的很讓人困惑。我會很感激這方面的幫助。

這裏是整個頁面的代碼:

protected void Page_Load(object sender, EventArgs e) 
    {   
     if(!IsPostBack) 
     {     
      ddlEmprendimientos.DataSource = Emprendimiento.DevolverEmprendimientosConEvaluacionesIncompletas(); 
      ddlEmprendimientos.DataValueField = "id"; 
      ddlEmprendimientos.DataTextField = "titulo"; 
      ddlEmprendimientos.DataBind(); 
      pnlEvaluador.Visible = false;  
     } 
    } 

    protected void lstEmprendimientos_SelectedIndexChanged(object sender, EventArgs e) 
    { 

    } 

    protected void lstEvaluadores_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Evaluador ev = Evaluador.FindByID(lstEvaluadores.SelectedValue); 
    } 

    protected void btnAsignarEvaluador_Click(object sender, EventArgs e) 
    {    
     Emprendimiento emp = Emprendimiento.FindByID(Convert.ToInt32(ddlEmprendimientos.SelectedValue)); 
     Evaluador ev = Evaluador.FindByID(lstEvaluadores.SelectedValue); 
     Evaluacion eva = new Evaluacion(emp, ev, 0, "justificacion", DateTime.Now, false); 
     if (eva != null) 
     { 
      if (eva.Insertar()) 
      { 
       lblFeedback.Text = "Alta exitosa."; 
       emp.listaEvaluaciones.Add(eva); 
       lstEvaluadores.DataSource = emp.DevolverListaEvaluadoresQueNoEvaluanEmprendimiento(); 
       lstEvaluadores.DataTextField = "Nombre"; 
       lstEvaluadores.DataValueField = "Email"; 
       lstEvaluadores.DataBind(); 
       pnlEvaluador.Visible = true; 
       CargarEvaluadores(); 
      } 
      else 
      { 
       lblFeedback.Text = "Error en el ingreso de datos."; 
      } 
     } 
     else 
     { 
      lblFeedback.Text = "Error en el ingreso de datos."; 
     } 
    } 

    protected void btnSeleccionarEmp_Click(object sender, EventArgs e) 
    { 
     CargarEvaluadores(); 
    } 

    private void CargarEvaluadores() 
    { 
     Emprendimiento emp = Emprendimiento.FindByID(Convert.ToInt32(ddlEmprendimientos.SelectedIndex)); 
     lstEvaluadores.DataSource = emp.DevolverListaEvaluadoresQueNoEvaluanEmprendimiento(); 
     lstEvaluadores.DataTextField = "Nombre"; 
     lstEvaluadores.DataValueField = "Email"; 
     lstEvaluadores.DataBind(); 
     pnlEvaluador.Visible = true; 
    } 

    protected void ddlEmprendimientos_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     CargarEvaluadores(); 
    } 

頁標記:

<%頁標題= 「」 LANGUAGE = 「C#」 的MasterPageFile =「〜/ masterPage.Master 「AutoEventWireup =」true「CodeBehind =」asignarEvaluador.aspx.cs「Inherits =」InterfazUsuario.asignarEvaluador「>

<asp:DropDownList ID="ddlEmprendimientos" runat="server" OnSelectedIndexChanged="ddlEmprendimientos_SelectedIndexChanged"> 
</asp:DropDownList> 
<br /> 
<br /> 
<asp:Button ID="btnSeleccionarEmp" runat="server" OnClick="btnSeleccionarEmp_Click" Text="Seleccionar emprendimiento" Width="195px" /> 
<br /> 
<br /> 
<asp:Panel ID="pnlEvaluador" runat="server"> 
    <asp:ListBox ID="lstEvaluadores" runat="server" OnSelectedIndexChanged="lstEvaluadores_SelectedIndexChanged"></asp:ListBox> 
    <br /> 
    <br /> 
    <asp:Button ID="btnAsignarEvaluador" runat="server" OnClick="btnAsignarEvaluador_Click" Text="Asignar evaluador" Width="135px" /> 
    <br /> 
    <br /> 
    <asp:Label ID="lblFeedback" runat="server"></asp:Label> 
    <br /> 
</asp:Panel> 

+1

你能發佈這個頁面的整個ASPX標記嗎? – Seany84

+0

您在「SelectedIndexChanged」事件處理程序或「click」事件中獲取了正確的值還是沒有任何事件向您返回正確的值? –

+0

他們都沒有返回正確的值。我試着在每一步(PageLoad(),SelectIndexChanged())創建一個等於SelectedValue的變量,它始終爲0. – JimWind

回答

0

你需要改變你的DropDownList和ListBox控件到AutoPostback

的DropDownList

<asp:DropDownList ID="ddlEmprendimientos" runat="server" 
    OnSelectedIndexChanged="ddlEmprendimientos_SelectedIndexChanged" 
    AutoPostBack="True"> 
</asp:DropDownList> 

列表框

<asp:ListBox ID="lstEvaluadores" runat="server" 
    OnSelectedIndexChanged="lstEvaluadores_SelectedIndexChanged" 
    AutoPostBack="True"> 
</asp:ListBox> 

的AutoPostBack:

將此屬性設置爲如果服務器需要儘快它是由捕捉選擇 。例如,網頁上的其他控件可以根據用戶從列表 控件中的選擇自動填充 。

此屬性可用於根據用戶從列表中進行選擇,允許在網頁上自動填充其他控件。

此屬性的值存儲在視圖狀態。

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.autopostback(v=vs.110).aspx

+0

對不起,我在AutoPostBack = true之前都有兩個列表框,並且我隨機嘗試切換到一個按鈕以使其工作。可悲的是,兩者都不起作用。 – JimWind

+0

@JimWind你需要在這兩個控件上都設置'AutoPostBack'屬性爲'true'。你可以把它放回去,否則如果不行的話。 – Seany84

+0

讓他們都是真的,它仍然沒有工作。我有一半試圖向微軟發送電子郵件,詢問他們是否是Visual Studio錯誤或其他問題。 – JimWind

0

我發現再次檢查所有的東西后問題。

列表中的DataValueField爲'id','Emprendimiento'類中的id字段未定義,因此它總是返回null int(0)。謝謝你的幫助,最後只是一個愚蠢的錯誤。

+0

快速,取消該電子郵件給微軟:) – Seany84

相關問題