2012-09-03 76 views
0

我有一個小頁面,3下拉列表和文本框。 我的目標是在每個下拉框(或任何組合)中選擇一個值,並在發回後用上一次搜索的值設置選定值。 其中一個問題是1.每次在IE中選擇頁面正在回發(顯然) ,甚至當爲啓用視圖狀態添加屬性時,下拉列表不會保留所選值。保存下拉列表的值並在回發後設置選定的索引

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="QSerch.aspx.cs" Inherits="QSerch" 
    EnableViewState="true" EnableEventValidation="true" EnableViewStateMac="true"%> 

<%@ Register Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    Namespace="System.Web.UI" TagPrefix="asp" %> 
<!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> 
    <style type="text/css"> 
     .ddlstl 
     { 
      font-size: 13px; 
      font-family: Arial; 
     } 
     #Iframe1 
     { 
      height: 700px; 
      width: 540px; 
     } 
     .style2 
     { 
      width: 243px; 
     } 
    </style> 
</head> 
<body dir="rtl"> 
    <form id="form1" runat="server" enableviewstate="true"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptGlobalization="True" 
     EnablePartialRendering="true" LoadScriptsBeforeUI="false" ScriptMode="Release"> 
    </asp:ScriptManager> 
    <div style="float: right; width: 28px;"> 
     &nbsp;</div> 
    <div style="text-align: right; float: right;"> 
     <table border="0" cellpadding="0" cellspacing="0"> 
      <tr> 
       <td> 
        <table border="0"> 
         <tr> 
          <td style="width: 170px;"> 
           <asp:DropDownList ID="ddlMec" runat="server" AutoPostBack="True" CssClass="ddlstl" 
            Height="22px" Width="160px" EnableViewState="true" OnSelectedIndexChanged="ddlMec_SelectedIndexChanged"> 
           </asp:DropDownList> 
          </td> 
         </tr> 
         <tr> 
          <td style="width: 20px;"> 
           <asp:DropDownList ID="ddlTMec" runat="server" AutoPostBack="True" CssClass="ddlstl" 
            Height="22px" Width="160px" OnSelectedIndexChanged="ddlTMec_SelectedIndexChanged" 
            EnableViewState="true"> 
            <asp:ListItem Value="-1">בחר תפקיד</asp:ListItem> 
           </asp:DropDownList> 
          </td> 
         </tr> 
         <tr> 
          <td style="width: 170px;"> 
           <asp:DropDownList ID="ddlArea" runat="server" AutoPostBack="True" CssClass="ddlstl" 
            DataSourceID="adsArea" DataTextField="name_area" DataValueField="id_area" Height="22px" 
            Width="160px" OnSelectedIndexChanged="ddlArea_SelectedIndexChanged" AppendDataBoundItems="true" 
            EnableViewState="true"> 
            <asp:ListItem Value="-1" Text="בחר איזור"></asp:ListItem> 
           </asp:DropDownList> 
           <asp:AccessDataSource ID="adsArea" runat="server" DataFile="~/App_Data/Adam.mdb" 
            SelectCommand="SELECT [id_area], [name_area] FROM [table_area] ORDER BY [name_area]"> 
           </asp:AccessDataSource> 
          </td> 
         </tr> 
         <tr> 
          <td> 
           <asp:TextBox runat="server" Text="חיפוש חופשי" ID="txtFreeText" Style="font-size: 12px; 
            height: 15px; width: 151px" /> 
           <%--<input type="text" value="חיפוש חופשי" onfocus="deleteFreeText()" id="FreeText" name="FreeText" 
              style="font-size: 12px; height: 15px; width: 151px" runat="server" />--%> 
           <br /> 
          </td> 
         </tr> 
        </table> 
       </td> 
      </tr> 
      <tr> 
       <td align="right"> 
        <asp:UpdatePanel ID="UpdatePanel2" runat="server" RenderMode="Inline" UpdateMode="Conditional"> 
         <ContentTemplate> 
          <iframe id="Iframe1" runat="server" frameborder="0" name="Iframe1" scrolling="no" 
           width="360px" src="" style="overflow: auto"></iframe> 
         </ContentTemplate> 
        </asp:UpdatePanel> 
       </td> 
      </tr> 
     </table> 
    </div> 
    </form> 
</body> 
</html> 


    protected void Page_Load(object sender, EventArgs e) 
    { 
     TextBox tb = (TextBox)FindControl("txtFreeText"); 
     tb.Attributes.Add("onfocus", "this.value = ''"); 
     if (!Page.IsPostBack) 
     { 
      LoadProffesion(); 
     } 
    } 

回答

0

前兩個下拉菜單,(ID = ddlMec & ID = ddlTMec)不必須asoociated給它的任何數據。希望在頁面加載期間它將被數據綁定。

假設您必須遇到第三個下拉列表(id:ddlArea)的問題,可能是因爲您正在使用數據源控件綁定數據。所以每次頁面加載時,它都會重新填充數據,而選定的項目會丟失。

爲了解決這個問題,請嘗試在頁面加載時綁定下拉列表,並通過在Page.IsPostBacK屬性的幫助下控制它來防止覆蓋。

+0

所有的下拉列表綁定在第三的方式。我改變它到服務器端,我加載第一個下拉列表中的if(!Page.IsPostBack) LoadProffesion(); }和第二次下拉加載後,選擇索引更改的第一個,所以我想處理這個,然後我將第三個下拉列表傳送到服務器端 – Danny

0

只需從標記中刪除AutoPostBack =「True」即可。

DropDownList不需要AutoPostBack。

+0

但是,然後OnSelectedIndexChange不是射擊 – Danny

+0

丹尼你讓我困惑,但因爲你我學到了新東西......你應該首先從http://delphi.about.com/library/weekly/aa051705a.htm學習「回發事件處理序列」。通過這個,你肯定會發現你必須避免在頁面上添加ListItem,因爲後期事件處理。實現您的目標單獨分配ListItem或將數據源分配到.cs文件中的下拉列表以及if(!Page.isPostBack)條件中。希望這會幫助你。 – YOusaFZai

+0

這沒有幫助,因爲我正在做的每件事情,但仍然無法正常工作。我正在考慮在javascript – Danny

相關問題