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