.net如何使得点击button不刷新页面又更新数据

.net如何使得点击button不刷新页面又更新数据

问题描述:

一个小程序,选择下拉项之后Label会显示和选项一样的数据,点击清除会清除两者的数据,同时下方的表格会记录操作。
问题是,每次点击清除和选择下拉之后,表格中的数据仅仅一闪而过,随后就变为了空白,如果把下拉栏的autoPushBack关闭并且按钮变为input方式布置,这时候表中数据会一直存留,但“选择下拉项之后Label会显示和选项一样的数据,点击清除会清除两者的数据” 这个功能完全失效。
请问有什么办法解决,如果可以请尽可能详细一点,谢谢!

img


我是.aspx


 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>

    <script type="text/javascript" language="javascript">

        function left()
        {
            
            var tr = document.createElement("tr");
            var td1 = document.createElement("td");
            var td2 = document.createElement("td");

            var t = new Date();
            var h = t.getHours();
            var m = t.getMinutes();
            var s = t.getSeconds();
            var time = h + ((m < 10) ? ":0" : ":") + m + ((s < 10) ? ":0" : ":") + s + ((h > 12) ? ".pm" : ".am");

            td1.innerHTML = time;
            td2.innerHTML = "点击了清除";
         

            document.getElementById("mytable").appendChild(tr);
            tr.appendChild(td1);
            tr.appendChild(td2);
        }

        function right() {
            var tr = document.createElement("tr");
            var td1 = document.createElement("td");
            var td2 = document.createElement("td");

            var t = new Date();
            var h = t.getHours();
            var m = t.getMinutes();
            var s = t.getSeconds();
            var time = h + ((m < 10) ? ":0" : ":") + m + ((s < 10) ? ":0" : ":") + s + ((h > 12) ? ".pm" : ".am");

            td1.innerHTML = time;
            td2.innerHTML = "点击了下拉";
     

            document.getElementById("mytable").appendChild(tr);
            tr.appendChild(td1);
            tr.appendChild(td2);
        }
       
    </script>
    
    <style type="text/css">
        .auto-style1 {
            margin-bottom: 0px;
        }
        </style>
</head>
<body>
    <form id="form1" runat="server">
        <div>
        </div>
        <asp:DropDownList ID="xiala" runat="server" Height="63px" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" 
            Width="134px" 
            AutoPostBack="True" 
            CssClass="auto-style1">

            <asp:ListItem></asp:ListItem>
            <asp:ListItem>345345</asp:ListItem>
            <asp:ListItem>32321</asp:ListItem>
            <asp:ListItem>123123</asp:ListItem>

           
        </asp:DropDownList>
        
         <br />
        <asp:Label ID="Label1" runat="server" Text="" > </asp:Label>
         <br />
        <asp:Button  ID="Button1" runat="server" Text="清除" OnClick="Button1_Click" />
        <%--<input type="button"  id="Button2" runat="server" value="Очистить"  onclick="Button1_Click"  /><br />--%>
        <br />

        <div>
               <table border="1" id="mytable">
    <tr><td><asp:Label ID="Label3" runat="server" Text="时间"> </asp:Label></td>
        <td><asp:Label ID="Label2" runat="server" Text="行为"> </asp:Label></td></tr>
    </table>
        </div>
        
        
        
    </form>
</body>
</html>



我是.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;





public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
       
            Button1.Attributes["onclick"] = "left()";
            xiala.Attributes  ["onclick"] = "right()";
         
    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
     

          Label1.Text = xiala.Text;

    }

    protected void Button1_Click(object sender, EventArgs e)
    {

       
          xiala.Text  = "";
          Label1.Text = "";
       
    }
}

题主这个功能不需要服务器端方法,用的话需要结合scriptmanger,这样才能无刷新更新dom对象,不过就题主这个效果上完全没必要scriptmanger,除非要无刷新保存操作记录数据到服务器。用服务器端方法会刷新页面,导致js生成的内容全部没有了。

以下为js实现的效果,不需要和服务端通信刷新,有帮助或启发麻烦点个采纳【本回答右上角】,谢谢~~有其他问题可以继续交流~

img

 <%@ Page Language="C#" AutoEventWireup="true"%>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <style type="text/css">
        .auto-style1 {
            margin-bottom: 0px;
        }
        </style>
</head>
<body>
    <form id="form1" runat="server">
        <div>
        </div>
        <asp:DropDownList ID="xiala" runat="server" Height="63px"   onclick="right()"
            Width="134px" 
           
            CssClass="auto-style1">
            <asp:ListItem></asp:ListItem>
            <asp:ListItem>345345</asp:ListItem>
            <asp:ListItem>32321</asp:ListItem>
            <asp:ListItem>123123</asp:ListItem>
           
        </asp:DropDownList>
         <br />
        <asp:Label ID="Label1" runat="server" Text="" > </asp:Label>
         <br />
        <asp:Button  ID="Button1" runat="server" Text="清除" OnClientClick="left();return ClearText()" />
        <%--<input type="button"  id="Button2" runat="server" value="Очистить"  onclick="Button1_Click"  /><br />--%>
        <br />
        <div>
               <table border="1" id="mytable">
    <tr><td><asp:Label ID="Label3" runat="server" Text="时间"> </asp:Label></td>
        <td><asp:Label ID="Label2" runat="server" Text="行为"> </asp:Label></td></tr>
    </table>
        </div>
        
    </form>
    
    <script type="text/javascript" language="javascript">
        function ClearText() {
            document.getElementById('Label1').innerHTML = '';
            document.getElementById('xiala').value = '';
            return false;//由于asp:Button生成的按钮是submit会提交表单,所以用return false阻止表单提交,注意绑定的事件也需要return ClearText()返回false
        }
        document.getElementById('xiala').onchange = function () {//添加下拉框change事件更新Label的内容
            document.getElementById('Label1').innerHTML = this.value;
        }
        function left() {
            var tr = document.createElement("tr");
            var td1 = document.createElement("td");
            var td2 = document.createElement("td");
            var t = new Date();
            var h = t.getHours();
            var m = t.getMinutes();
            var s = t.getSeconds();
            var time = h + ((m < 10) ? ":0" : ":") + m + ((s < 10) ? ":0" : ":") + s + ((h > 12) ? ".pm" : ".am");
            td1.innerHTML = time;
            td2.innerHTML = "点击了清除";

            document.getElementById("mytable").appendChild(tr);
            tr.appendChild(td1);
            tr.appendChild(td2);
        }
        function right() {
            var tr = document.createElement("tr");
            var td1 = document.createElement("td");
            var td2 = document.createElement("td");
            var t = new Date();
            var h = t.getHours();
            var m = t.getMinutes();
            var s = t.getSeconds();
            var time = h + ((m < 10) ? ":0" : ":") + m + ((s < 10) ? ":0" : ":") + s + ((h > 12) ? ".pm" : ".am");
            td1.innerHTML = time;
            td2.innerHTML = "点击了下拉";

            document.getElementById("mytable").appendChild(tr);
            tr.appendChild(td1);
            tr.appendChild(td2);
        }
    </script>
</body>
</html>
 

scriptmanger参考

使用Ajax技术,异步或同步通信,可以实现局部刷新功能。

如果不涉及到数据库操作,要么这个功能完全前端实现(完全用JavaScript实现),要么完全后端实现(C#的方法)