私はasp.netが初めてで、タイトルが少しわかりにくいかもしれませんので説明させてください。また、これを間違った方法で行っている可能性があるので、何か提案があれば教えてください。
ユーザーがサイトにログインすると、クライアントとサイトのドロップダウン リストが表示されます。複数のクライアントまたはサイトを持つことができます。ログインすると、サイトに関する情報を表示する一般的なダッシュボードに送信されます。
ストアド プロシージャを使用して 2 つのドロップダウン リストを設定する Sitepicker と呼ばれるサイト ドロップダウンのユーザー コントロールを作成しました。多くのユーザーはクライアントとサイトを 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();
}
これがサイトピッカーのページロードです。
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> </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>