2013-08-07 155 views
0

我有一个aspx页面上的验证码ASP按钮重新载入页面?

<div id="bloc1"> 
    Hey you 
</div> 

<asp:Button ID="Button2" runat="server" Text="Button" onclick="Button2_Click" OnClientClick="change_page()" /> 
<input id="Button1" type="button" value="button" onclick="change_page()" /> 

<div id="bloc2" style="display:none"> 
    Hey me 
</div> 

<script type="text/javascript"> 
    function change_page() { 
     document.getElementById("bloc2").style.display = "block"; 
     document.getElementById("bloc1").style.display = "none"; 
    } 
</script> 

当我点击HTML按钮,我的脚本运行良好:Bloc1消失,Bloc2出现。

当我点击ASP按钮时,Bloc1消失,Bloc2显示得非常快,Bloc2消失,Bloc1重新出现(所以回到开始处),就好像页面已重新加载一样。

背后的代码做一些事情:

protected void Button2_Click(object sender, EventArgs e) 
    { 
     this.Button2.Text = "new Button"; 
    } 

我如何能做到像HTML按钮,但与后面的代码功能?

PS:我不想使用UpdatePanel和ScriptManager。

+1

这是因为asp:button是一个服务器控件,当你点击页面获取回发后,它会被刷新。 – Raghubar

+0

是的,你是对的。那么我怎样才能设法使用服务器功能,但仍然能够使用JavaScript的功能,如在HTML中? – Ouado

回答

-1

试试这个:

<script type="text/javascript"> 
    function change_page() { 
     document.getElementById("bloc2").style.display = "block"; 
     document.getElementById("bloc1").style.display = "none"; 
    } 
</script> 

<asp:Button ID="Button2" runat="server" Text="Button" onclick="Button2_Click" OnClientClick="return change_page();" /> 

protected void Button2_Click(object sender, EventArgs e) 
{ 
    // Your code 
    Page.ClientScript.RegisterClientScriptBlock(this.GetType,"Test", "<script type='text/javascript' language='javascript'>change_page();</script>"); 
} 
+0

是的,它的作品。但是如果我想要代码后面的东西呢? Like:this.Button2.Text =“lol” 它不工作了 – Ouado

+0

我已根据您的要求编辑了代码。 – Raghubar

3

您需要了解ASP.NET WebForms和如何在HTML网页的实际工作之间的差别。无论您是否有与其关联的OnClick事件,控件都会将标记渲染为<input type="submit">。这意味着您的表单将在点击后提交给服务器,除非您使用JavaScript停止它。

你的服务器并不知道你在javascript中显示和隐藏了什么,因为像CSS display这样的东西不是帖子的一部分。所以当页面再次加载时,它回到了第一次加载的时候。

你不能两种方式 - 无论是发布到服务器,并获得一个新的页面,或者你没有。如果你需要执行服务器代码而没有完整的post和full load,那么你需要做一些AJAX--这可能发生在UpdatePanels或适当的AJAX上(例如,带有ASHX处理程序的jQuery或WebMethod方法) 。

+0

好的,谢谢你的解释! 然后我会检查Ajax。我不想使用updatepanels – Ouado

+0

我不怪你不想使用UpdatePanels。他们是一个有趣的想法,但实际上他们是可怕的事情。它们使用比正确的AJAX多几百倍的带宽,不必要地运行整个页面生命周期,并且只是一个很难处理的问题。唯一的好处是,如果您已经大量使用以WebForms为中心的功能,那么从完整文章切换到部分文章相对比较容易,而且没有太多变化。但是如果您从一开始就正确地构建您的站点,了解服务器和客户端代码之间的差异,适当的AJAX实际上会更容易。 –

1

您的ASP:Button是一个在服务器上运行的控件,即它提交按钮,然后重新加载页面的原始状态。

你有两个选择:

1)如果你只是需要这是客户端的功能,那么就不要使用ASP:按钮,只需使用输入按钮,设置和change_page()来更改视图。

2)如果你想提交回服务器并运行代码做一些其他的服务器端脚本,然后从asp:Button中删除change_page()脚本,并在代码隐藏中显示隐藏div。

protected void Button2_Click(object sender, EventArgs e) 
{ 
    // other server side scripts... 

    bloc1.Visible = false; 
    bloc2.Visible = true; 

} 
+0

好吧,所以我应该在两个div上添加runat =“server”? – Ouado

+0

这正是我想要的!非常感谢你! – Ouado

1

发生这种情况是因为你点击按钮去服务器端。你有两个解决方案:从ASP按钮的onclick = “Button2_Click”

  1. 删除此:

    <div id="bloc1"> 
        Hey you 
    </div> 
    
    <asp:Button ID="Button2" runat="server" Text="Button" onclick="Button2_Click" OnClientClick="change_page()" /> 
    <input id="Button1" type="button" value="button" onclick="change_page()" /> 
    
    <div id="bloc2" style="display:none"> 
        Hey me 
    </div> 
    
    <script type="text/javascript"> 
        function change_page() { 
         document.getElementById("bloc2").style.display = "block"; 
         document.getElementById("bloc1").style.display = "none"; 
        } 
    </script> 
    
  2. 保持它,但增加了返回false;调用JavaScript函数像这样经过:

    <div id="bloc1"> 
        Hey you 
    </div> 
    
    <asp:Button ID="Button2" runat="server" Text="Button" onclick="Button2_Click" 
          OnClientClick="change_page();return false;" /> 
    <input id="Button1" type="button" value="button" onclick="change_page()" /> 
    
    <div id="bloc2" style="display:none"> 
        Hey me 
    </div> 
    
    <script type="text/javascript"> 
        function change_page() { 
         document.getElementById("bloc2").style.display = "block"; 
         document.getElementById("bloc1").style.display = "none"; 
        } 
    </script> 
    
0

你可以简单地使asp按钮标签是这样的:

<asp:Button ID="YourID" UseSubmitBehavior="false" cssClass="btn btn-default" runat="server" Text="Take a Snap" OnClientClick="take_snapshot();" /> or 
<asp:Button ID="YourID" cssClass="btn btn-default" runat="server" Text="Take a Snap" OnClientClick="return false;" /> 

其实,你可以改变属性UseSubmitBehavier或OnClientClick这个方法简单地返回false在您在onClientClick中调用的方法中。当你想要重新加载页面时,你可以返回true。