在ASP.NET上使用.selectedvalue后,下拉列表卡住了

本文关键字:下拉列表 selectedvalue NET ASP | 更新日期: 2023-09-27 18:01:51

我是新的asp.net,我认为这是很容易的问题,但我找不到答案。我在我的页面上有一个下拉列表(这将是页面a),去那个页面的方法之一是跟随另一个页面(页面B)上的链接。通过这个链接,我提供了一些参数,所以我在页面a的Page_load中使用它们:

    protected void Page_Load(object sender, EventArgs e)
    {
        string strStatus = Request.QueryString["status"];
        DListStatus.SelectedValue = strStatus;
    }

但在它之后,我不能选择别的东西,除了这个值,有时我看到第二个新项目被选中,但在一眨眼的功夫,它又回到了预加载的一个。我认为。clearselection()会有所帮助,但它不是(或者也许我在错误的地方使用它)。所以我真的不知道该怎么办,非常感谢您的帮助

在ASP.NET上使用.selectedvalue后,下拉列表卡住了

关于ASP,你需要知道的最重要的事情之一是:. NET是页面生命周期。互联网上有很多关于这方面的帮助。这里有一个快速链接:http://blogs.msdn.com/b/aspnetue/archive/2010/01/14/asp-net-page-life-cycle-diagram.aspx。

注意,Page_Load事件在任何事件处理之前都是fire。这意味着,如果您使用事件处理程序捕获下拉菜单中的更改,则当前代码将首先将其重置为查询字符串值。

当然这是一个非常大的问题,所以ASP。NET增加了一个Page.IsPostBack属性来帮助。这个值只在第一次加载页面时为真,在所有事件处理回发时为假。使用此信息,您可以调整您的例程,仅在IsPostBack为false时应用该值。

if (!Page.IsPostBack)
{
    string strStatus = Request.QueryString["status"];
    DListStatus.SelectedValue = strStatus;
}

检查是否为post back

if (!Page.IsPostBack)
{
    string strStatus = Request.QueryString["status"];
    DListStatus.SelectedValue = strStatus;
}

当您选择一个新项目时,它是否调用回发到服务器?可能是SelectedIndexChanged事件?

如果是,则在每次回发时都会破坏所选值。Page_Load经常被调用。基本上,在页面执行任何服务器端操作时。它是页面生命周期的一部分,涉及页面所做的一切。因此,页面上的每个事件(按钮单击,选定的索引更改等)将在运行任何事件处理程序代码之前运行Page_Load中的代码。

为避免混淆此值,可以将此代码包装在条件语句中,以检查这是初始页面加载还是触发的回发:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string strStatus = Request.QueryString["status"];
        DListStatus.SelectedValue = strStatus;
    }
}