使用下拉列表在页面加载期间自动填充页面

时间:2013-02-11 22:03:50

标签: c# asp.net

我是asp.net的新手,我的头衔可能有点令人困惑所以让我解释一下,如果你有任何建议可能会很好,我也可能会这样做错误。

当用户登录我的网站时,会向他们提供他们的客户和网站的下拉列表。他们可以拥有多个客户或网站。登录后,它们将被发送到显示有关该站点的信息的常规仪表板。

我为名为Sitepicker的sitedrop做了一个用户控件,它使用存储过程填充了2个下拉列表。许多用户只有1个客户端和站点,因此我希望它自动选择下拉列表中填充的第一个客户端和站点,并将其用于常规仪表板。

这是我如何填充网站下拉列表。

    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;

                }
            }

所以一切都很好。我的问题是,一旦我的常规仪表板页面加载,没有任何标签更新,除非我点击刷新。

以下是常规信息中心的page_load

    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();
    }

我不确定我是否做得对。一旦用户登录,他们就会被定向到仪表板页面,除非他们刷新,否则它将始终显示No Site Selected。

有关如何正确执行此操作的任何想法?

网站选择器的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>

1 个答案:

答案 0 :(得分:0)

我认为您的想法是postback

转到您的xhtml并确保下拉列表中的AutoPostback="True"

这将“postback”并导致您的页面刷新并应用更改。这允许在asp.net中进行客户端和服务器通信。

这可能是一个很好的资源,可以为您提供更多信息:

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