使用dropdownlist在页面加载期间自动填充页面

问题描述:

我是新来的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

我想你在想什么的是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