0

我是 asp.net 的新手,我的标题可能有点混乱,所以让我解释一下,我也可能以错误的方式这样做,所以如果你有任何建议会很好。

当用户登录我的网站时,他们会得到一个他们的客户和网站的下拉列表。他们可以有多个客户端或站点。一旦他们登录,他们就会被发送到一个显示该站点信息的通用仪表板。

我为名为 Sitepicker 的站点下拉菜单创建了一个用户控件,它使用存储过程填充 2 个下拉列表。许多用户只有一个客户端和站点,所以我希望它自动选择填充在下拉列表中的第一个客户端和站点,并将其用于一般仪表板。

这就是我填充网站下拉列表的方式。

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

这是站点选择器的页面加载。

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

我不确定我是否做得对。用户登录后,他们将被定向到仪表板页面,除非他们刷新,否则它将始终显示“未选择站点”。

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

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

1 回答 1

0

我想你在想的是一个postback

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

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

这可能是为您提供更多信息的好资源:

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

于 2013-02-11T22:09:56.640 回答