C# 链接按钮在执行click事件代码前回发?
我试图添加一个基本的切换到我的网站,以便在静态和响应布局之间切换 我的页面底部有两个链接按钮:C# 链接按钮在执行click事件代码前回发?,c#,asp.net,asplinkbutton,C#,Asp.net,Asplinkbutton,我试图添加一个基本的切换到我的网站,以便在静态和响应布局之间切换 我的页面底部有两个链接按钮: <div id="toggleView"> <asp:linkbutton ID="lbtnMobile" runat="server" Visible="false">Switch to Mobile site</asp:linkbutton> <asp:linkbutton ID="lbtnFull" runat="server" &g
<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事件应读取该布尔值并使用它调整视口元标记:
protected void Page_Load(object sender, System.EventArgs e)
{
//Other Stuff in here, irrelevant to current question
HtmlMeta view = new HtmlMeta();
view.Name = "viewport";
if (c.ViewChange = false)
{
view.Content = "width=device-width, initial-scale=1";
lbtnFull.Visible = true;
lbtnMobile.Visible = false;
}
else
{
view.Content = "width=1040px, initial-scale=1";
lbtnFull.Visible = false;
lbtnMobile.Visible = true;
}
MetaPlaceHolder.Controls.Add(view);
}
然而,当我点击“切换到完整站点”链接按钮时,页面将回发,但没有任何更改。回发是否过早触发?您应该更改
if (c.ViewChange = false)
到
让事情发生。但我想这不是你所期望的。因为页面加载是在单击事件之前执行的。您可以将一些代码从页面加载移动到单击事件处理程序。您应该更改
if (c.ViewChange = false)
到
让事情发生。但我想这不是你所期望的。因为页面加载是在单击事件之前执行的。您可以将一些代码从页面加载移动到单击事件处理程序。页面加载事件将发生在单击事件之前。参考这个
这意味着您将在OnClick处理程序中设置ViewChange之前检查它。页面加载事件将在单击事件之前发生。参考这个
这意味着您将在OnClick处理程序中设置视图更改之前对其进行检查。当您回发页面时,加载总是被调用。因此,页面加载中提到的代码将始终得到执行
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.
}
}
此外,您需要在点击事件中添加一些额外的代码,即显示什么和隐藏什么。当您回发页面时,加载总是被调用。因此,页面加载中提到的代码将始终得到执行
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.
}
}
另外,您需要在点击事件中添加一些额外的代码,即显示什么和隐藏什么。首先,您在页面加载中的实现不是很清楚 尽管如此,根据我对TOD的了解,这是我的建议:
- 由于页面加载将在回发事件(如buton或链接单击)之前执行,因此需要持久化类对象的值
- 创建类类型的受保护属性(在其中存储/管理ViewChange属性)
- 属性应该在内部(在get&set中)保存/持久化session/viewstate中的值(类似于您编写的内容)
- 设置和读取只能通过直接引用属性(而不是如何完成单击事件)进行
- 单击按钮并设置新值后,您必须重定向到同一页面,因为只有这样页面加载事件才会获得您刚刚在单击事件中更改的新布尔值;(页面加载发生在任何其他回发事件之前)
- 新重定向的另一种替代方法是,您可以创建一个具有视图更改逻辑的函数(如页面加载代码中所示),该函数应该在按钮/链接单击事件(post布尔值更改)和页面加载事件中调用,但在“!IsPostBack”块中
希望这对您有所帮助。首先,您在页面加载中的实现不是很清楚 尽管如此,根据我对TOD的了解,这是我的建议:
- 由于页面加载将在回发事件(如buton或链接单击)之前执行,因此需要持久化类对象的值
- 创建类类型的受保护属性(在其中存储/管理ViewChange属性)
- 属性应该在内部(在get&set中)保存/持久化session/viewstate中的值(类似于您编写的内容)
- 设置和读取只能通过直接引用属性(而不是如何完成单击事件)进行
- 单击按钮并设置新值后,您必须重定向到同一页面,因为只有这样页面加载事件才会获得您刚刚在单击事件中更改的新布尔值;(页面加载发生在任何其他回发事件之前)
- 新重定向的另一种替代方法是,您可以创建一个具有视图更改逻辑的函数(如页面加载代码中所示),该函数应该在按钮/链接单击事件(post布尔值更改)和页面加载事件中调用,但在“!IsPostBack”块中
希望这能对您有所帮助。您的事件绑定到linkbutton的位置在哪里?在页面\u Load上,页面将检查my User.vb类文件中的布尔变量,并且它应该显示适当的链接按钮,同时隐藏另一个按钮(显示在页面\u Load事件中),每个linkbutton都有一个click事件,该事件将更改布尔值,然后刷新页面。我不确定在哪里需要添加额外的绑定?我想@Hakumanatata所说的是,他在标记中没有看到OnClick=“lbtnFull\u Click”,通常在标记中声明事件绑定。通过在事件处理程序中放置断点来仔细检查这一点,然后在单击按钮时查看断点是否断开。您是否尝试在这些事件处理程序期间检查任何断点,以确保是否调用了该断点?与linkbutton的事件绑定在哪里