使用dropdownlist在页面加载期间自动填充页面
我是新来的asp.net,我的标题可能有点混乱,所以让我解释一下,我也可能会这样做是错误的方式,所以如果你有任何建议,将是大。使用dropdownlist在页面加载期间自动填充页面
当用户登录到我的网站时,他们会获得其客户和网站的下拉列表。他们可以有多个客户或站点。一旦他们登录,他们将被发送到显示有关该网站的信息的一般仪表板。
我做了一个名为Sitepicker的sitedrop用户控件,它使用存储过程填充2个下拉列表。许多用户只有1个客户端和站点,所以我希望它自动选择填充在下拉列表中的第一个客户端和站点,并将其用于常规仪表板。
这是我如何填充网站dropdownlist。
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;
}
}
因此,所有的作品都很好。我的问题是一旦我的一般仪表板页面加载,没有任何标签更新,除非我刷新。
下面是一般的仪表盘
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();
}
我不知道如果我这样做是正确在Page_Load。一旦用户登录,它们将被引导至仪表板页面,并且除非刷新,否则它将始终显示“未选择站点”。
关于如何正确地做到这一点的任何想法?
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
它设置为true。哪些适用于何时选择客户端。对不起,我对我的问题有些困惑,我会对其进行更新,但是当他们第一次加载到通用仪表板时,下拉列表将自动选择第一个客户端和站点(许多用户只有一个)。所以有我的问题。如果他们确实从下拉列表中选择了新的网站,它将以正确的值回发。这是导致我出现问题的第一个初始负载。 – Zach 2013-02-11 22:24:45
我编辑了自己的冠军。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 – 2013-02-11 22:11:29
如果您可以将此控件的HTML添加到您的问题中,将会有所帮助。另外,我没有看到为Session [“SiteID”]设置了值的任何地方。我错过了吗? – Melanie 2013-02-11 22:12:18
谢谢约翰,对不起,关于这个问题,我可以读标题中的标签,谢谢你纠正我的错误。 – Zach 2013-02-11 22:19:32