2013-02-11 95 views
0

我是新來的asp.net,我的標題可能有點混亂,所以讓我解釋一下,我也可能會這樣做是錯誤的方式,所以如果你有任何建議,將是大。使用dropdownlist在頁面加載期間自動填充頁面

當用戶登錄到我的網站時,他們會獲得其客戶和網站的下拉列表。他們可以有多個客戶或站點。一旦他們登錄,他們將被髮送到顯示有關該網站的信息的一般儀表板。

我做了一個名爲Sitepicker的sitedrop用戶控件,它使用存儲過程填充2個下拉列表。許多用戶只有1個客戶端和站點,所以我希望它自動選擇填充在下拉列表中的第一個客戶端和站點,並將其用於常規儀表板。

這是我如何填充網站dropdownlist。

void PopulateSiteList() 
    { 
      DataAccess da = new DataAccess(); 
      da.AddParameter("portaluserid", Page.User.Identity.Name, DataAccess.SQLDataType.SQLString, 256); 
      da.AddParameter("ClientID", Session["ClientID"], DataAccess.SQLDataType.SQLInteger, 4); 
      DataSet SiteList = da.runSPDataSet("Portal_SitePickerSiteList"); 

      DropDownListSite.DataSource = SiteList; 
      DropDownListSite.DataValueField = "SiteID"; 
      DropDownListSite.DataTextField = "SiteName"; 
      DropDownListSite.DataBind(); 
    } 

這是sitepicker的頁面加載。

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     {  
      if (Session["ClientName"] != null) 
       ClientButton.Text = Session["ClientName"].ToString(); 
      if (Session["SiteName"] != null) 
       SiteButton.Text = Session["SiteName"].ToString(); 

      LoadClientDDL(); 

      if (DropDownListClient.Items.Count.Equals(1)) 
      { 
       ClientButton.Enabled = false; 
       DropDownListClient.Visible = false; 
       int ClientID = int.Parse(DropDownListClient.SelectedItem.Value); 
       ClientButton.Text = DropDownListClient.SelectedItem.Text; 
       ClientButton.Visible = true; 
       Session["ClientID"] = ClientID; 
       Session["ClientName"] = DropDownListClient.SelectedItem.Text; 

       { 
        PopulateSiteList(); 

       } 

       if (DropDownListSite.Items.Count > 0) 

       { 
        DropDownListSite.SelectedIndex = 1; 
        DropDownListSite.Visible = false; 
        SiteButton.Visible = true; 
        int SiteID = int.Parse(DropDownListSite.SelectedItem.Value); 
        SiteButton.Text = DropDownListSite.SelectedItem.Text; 

        Session["SiteID"] = SiteID; 
        Session["SiteName"] = DropDownListSite.SelectedItem.Text; 

       } 
      } 

因此,所有的作品都很好。我的問題是一旦我的一般儀表板頁面加載,沒有任何標籤更新,除非我刷新。

下面是一般的儀表盤

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Session["SiteID"] != null) 
     { 
      SiteID = int.Parse(Session["SiteID"].ToString()); 
      PopulateAccountData(); 
      PopulateAccountInformation2(); 
      PopulateSiteNodes(); 

     } 
     else 
      LabelSiteName.Text = "No Site Selected"; 
    } 

void PopulateAccountData() 
    { 

     DataAccess da = new DataAccess(); 
     da.AddParameter("SiteID", SiteID, DataAccess.SQLDataType.SQLInteger, 4); 
     SiteHeader = da.runSPDataSet("Portal_GetDashboardInfo"); 

     LabelGeneralManagerFirstName.Text = SiteHeader.Tables[0].Rows[0]["FirstName"].ToString(); 
     LabelGeneralManagerLastName.Text = SiteHeader.Tables[0].Rows[0]["LastName"].ToString(); 
     LabelSite.Text = SiteHeader.Tables[0].Rows[0]["SiteName"].ToString(); 
    } 

我不知道如果我這樣做是正確在Page_Load。一旦用戶登錄,它們將被引導至儀表板頁面,並且除非刷新,否則它將始終顯示「未選擇站點」。

關於如何正確地做到這一點的任何想法?

HTML代碼的網站選擇器

<table> 
<tr> 
<td><asp:Button ID="ClientButton" runat="server" OnClick="ClientButton_Click" Text="Select Client" /></td> 
<td style="vertical-align:top"><asp:DropDownList ID="DropDownListClient" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownListClient_SelectedIndexChanged" Visible="False" Height="36px"> 
    </asp:DropDownList></td> 

<td>&nbsp;&nbsp;</td>  
<td><asp:Button ID="SiteButton" runat="server" OnClick="SiteButton_Click" Text="Select Site" /></td> 
<td style="vertical-align:top"><asp:DropDownList ID="DropDownListSite" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownListSite_SelectedIndexChanged" Visible="False" Height="36px"> 
    </asp:DropDownList></td> 


</tr> 

</table> 
+0

我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2013-02-11 22:11:29

+0

如果您可以將此控件的HTML添加到您的問題中,將會有所幫助。另外,我沒有看到爲Session [「SiteID」]設置了值的任何地方。我錯過了嗎? – Melanie 2013-02-11 22:12:18

+0

謝謝約翰,對不起,關於這個問題,我可以讀標題中的標籤,謝謝你糾正我的錯誤。 – Zach 2013-02-11 22:19:32

回答

0

我想你在想什麼的是postback

轉到您的XHTML和你的下拉列表確保AutoPostback="True"

這將「postback」並使您的頁面刷新並應用更改。這允許在asp.net中客戶端和服務器通信如何發生。

這可能是更多信息一個很好的資源爲你:

http://msdn.microsoft.com/en-us/library/aa720416(v=vs.71).aspx

+0

它設置爲true。哪些適用於何時選擇客戶端。對不起,我對我的問題有些困惑,我會對其進行更新,但是當他們第一次加載到通用儀表板時,下拉列表將自動選擇第一個客戶端和站點(許多用戶只有一個)。所以有我的問題。如果他們確實從下拉列表中選擇了新的網站,它將以正確的值回發。這是導致我出現問題的第一個初始負載。 – Zach 2013-02-11 22:24:45

相關問題