linkbuttons在执行点击事件代码之前回发?

时间:2015-09-22 23:03:13

标签: c# asp.net asplinkbutton

我正在尝试向我的网站添加一个基本开关,以便在静态布局和响应式布局之间切换。

我的页面底部有两个链接按钮:

while(boolContinue)

他们都有一个非常相似的OnClick事件。

<div id="toggleView">

    <asp:linkbutton ID="lbtnMobile" runat="server" Visible="false">Switch to Mobile site</asp:linkbutton>

    <asp:linkbutton ID="lbtnFull" runat="server" >Switch to Full site</asp:linkbutton>

</div>

事件应该在类文件(User.vb)中设置一个布尔值在true或false之间,然后保存会话,在回发时,Page_Load事件应该读取此布尔值并使用它来调整Viewport元标记: / p>

protected void lbtnFull_Click(object sender, EventArgs e)
    {
        c.ViewChange = true;
        Session["Customer"] = c;
    }
    protected void lbtnMobile_Click(object sender, EventArgs e)
    {
        c.ViewChange = false;
        Session["Customer"] = c;
    }

然而,当我点击&#34;切换到完整网站&#34;链接按钮,页面将回发但没有任何改变。回复是否会以某种方式过早触发?

4 个答案:

答案 0 :(得分:2)

页面加载甚至会在您的点击事件之前发生。参考此here

这意味着在OnClick处理程序中设置ViewChange之前,您的检查将会发生。

答案 1 :(得分:1)

你应该改变

if (c.ViewChange = false)

if (c.ViewChange == false)

要发生的事情。但我认为它不会成为你的期望。因为page_load是在click事件之前执行的。您可以将一些代码从page_load移动到单击事件处理程序。

答案 2 :(得分:1)

当你回发 Page_Load 总是被调用。因此, Page_Load 中提到的代码将始终执行。

protected void Page_Load(object sender, System.EventArgs e)
{
   ... All your mentioned code will be executed.
} 

因此,您在浏览器中当前查看的 HTML 页面中找不到任何更改,因为在回发时,初始内容也已执行。您需要将内容包装在!IsPostBack 中,以使其正常工作。

因此,请按以下方式修改代码。

protected void Page_Load(object sender, System.EventArgs e)
{    
    if(!IsPostback)
    {
       ... All your mentioned code will be executed during normal load.
    }
} 

此外,您需要在 LinkBut​​ton 点击事件中添加一些额外的代码,即要显示的内容和要隐藏的内容。

答案 3 :(得分:0)

首先,你在Page_Load中的实现并不是很清楚。

尽管如此,这也是我所推荐的,我已经提到过:

  • 由于页面加载将在回发事件之前执行,如按钮或链接点击,您需要保留类对象的值
  • 创建类的类型的受保护属性(存储/管理ViewChange属性的位置)
  • 该属性应该在内部(在get&amp; set中),持有/持久化session / viewstate中的值(类似于您已经写过的内容)
  • 设置和阅读应仅通过直接引用该属性(而不是您如何完成点击事件)
  • 单击按钮并设置新值后,您将不得不重定向到同一页面,因为只有这样,Page_Load事件才会获得您在点击事件中刚刚更改的新布尔值; (Page_Load发生了任何其他的回发后事件)
  • 新重定向的替代方法是,您可以创建一个具有视图更改逻辑的函数(如Page_Load代码中所示),并且应该在按钮/链接单击事件上调用此函数(布尔值更改后) )以及在Page_Load事件中,但在&#34;!IsPostBack&#34;块

希望这会对你有所帮助。