我是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,但它不是(或者我可能在错误的地方使用它)。所以我真的很想知道该怎么做,并且非常感谢你的帮助
答案 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;
}