在他的ASP.NET上使用.SelectedValue后,DropDownList卡住了

时间:2014-05-05 17:25:14

标签: c# asp.net

我是asp.net的新手,我认为这是一个非常简单的问题,但我找不到答案。我的页面上有一个DropDownList(将是页面A),其中一个转到该页面的方法是按照另一页面上的链接(第B页)。通过这个链接,我提供了一些参数,所以我在第A页的Page_load中使用它们:

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

但在它之后我无法选择其他东西来解除这个值,有时候我会看到第二个新项目被选中,但是在眨眼之间它会转回到预装的那个。我认为.ClearSelection()将是hepl,但它不是(或者我可能在错误的地方使用它)。所以我真的很想知道该怎么做,并且非常感谢你的帮助

3 个答案:

答案 0 :(得分:0)

检查是否是回复

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

答案 1 :(得分:0)

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

如果是这样,您在每次回发后都会破坏所选值。 Page_Load被调用很多。任何时候页面在服务器端执行任何操作,基本上。它是页面所有内容的page lifecycle的一部分。因此,页面上的每个事件(按钮单击,选定的索引更改等)将在运行任何事件处理程序代码之前运行Page_Load中的代码。

为了避免破坏此值,您可以将此代码包装在条件中,以检查这是初始页面加载还是触发后回复:

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

答案 2 :(得分:0)

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

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

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

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