我是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> </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>
我想你想的是postback
转到您的xhtml并确保AutoPostback="True"
在您的下拉列表中。
这将"postback
",并导致您的页面刷新和应用更改。这允许在asp.net中如何进行客户端和服务器通信
这可能是一个很好的资源,为您提供更多信息:
http://msdn.microsoft.com/en-us/library/aa720416(v=vs.71).aspx