0

我正在使用 C#.net 创建一个应用程序。

我正在尝试在数据库中的数据更新后立即更新我的页面。
我已经将数据库中的一个值存储在一个标签中,并且每次我都调用一个函数,该函数将相同的值存储在另一个标签中,然后我比较两个标签。
代码是

我的网页.aspx.cs 是

public partial class _Default : System.Web.UI.Page
{
    SqlConnection con = new SqlConnection();
    protected void Page_Load(object sender, EventArgs e)
    {
        con.ConnectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
        if (con.State == System.Data.ConnectionState.Closed)
        {
            con.Open();
        }
        SqlDataAdapter adp = new SqlDataAdapter("SELECT name from Master where id= 10"), con);
        DataSet ds = new DataSet();
        adp.Fill(ds);
        Label2.Text = Convert.ToString(ds1);
    }
    protected String CodeBehind()
    {
        SqlDataAdapter adp = new SqlDataAdapter("SELECT name from Master where id= 10"), con);
        DataSet ds = new DataSet();
        adp.Fill(ds);
        String ds2 = Convert.ToString(ds1);
        return (ds2);
    }
    protected int compare()
    {
        string abc = Label2.Text;
        string abcd = Label3.Text;
        if (abc == abcd)
        { 
            return(0);
        }
        else
        {
            return (1);
        }
     }
 }

我的前端 javascript 代码是

 <script type="text/JavaScript">
    function AutoRefresh() {
        document.getElementById('<%= Label3.ClientID %>').innerHTML = '<%= CodeBehind() %>';
        var res = '<%= compare() %>'
        if ( res == 1) {
            alert("same");
            setTimeout("location.reload(true);", 60000);
        }
        else {
         alert("different")
             abx();
         }
     }
     function abx() {
         AutoRefresh();
     }

但是有一个问题,当我调用函数代码隐藏时,它正在执行整个后端代码,因此两个标签的值同时更新。

我只想每次都调用函数后面的代码,并且只想更新一次 label2 的值。

有人可以告诉我我该怎么做。

4

5 回答 5

1

你不能从 JavaScript 调用 C# 函数——如果可以的话,想象一下那些有恶意的人会做什么?

您需要在这里使用 Ajax,并从您的 Web 表单中发布/获取信息。

您的 JavaScript 代码除了重新加载您的页面之外什么都不做 - 这意味着将发生一个完整的页面加载周期,因此您的所有代码都在执行。您还混淆了客户端和服务器端代码,并且误解了 ASPX 引擎如何呈现其内容。

我将JQuery 用于我的 Ajax(您可以不使用 JQuery,但 JQuery 使它更快更容易),但您还需要让 Ajax 调用可以访问您的函数。使用回调来更新您的标签:

  $.ajax({
          url: "/url/to/your/post/page"
         }).done(function ( data ) {
                    // Check validity of "data"
                      $("#label2").val("Updated!"); 
        });

值得注意的是,您可以做更多的事情。有关 $ajax() 文档,请参阅我的链接。

就“/url/to/your/post/page”而言,因为您使用的是 Web 表单,所以您需要创建一个页面,将正确的内容返回给您的 ajax 函数。稍后我会发布更多信息。

在尝试执行像定时 AJAX 回调这样复杂的事情之前,您确实需要首先了解 JavaScript 和 C# 之间的区别 - 您的 <%=%> 标记在 HTML 输出到客户端之前呈现,并且客户端完全看不到您的 C# 类或其方法。

于 2013-01-07T06:19:36.573 回答
0

相应地更新您的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        con.ConnectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
        if (con.State == System.Data.ConnectionState.Closed)
        {
        con.Open();
        }

        Label2.Text = CodeBehind();
    }
}

protected String CodeBehind()
{
    SqlDataAdapter adp = new SqlDataAdapter("SELECT name from Master where id= 10"), con);
    DataSet ds = new DataSet();
    adp.Fill(ds);
    String ds2 = Convert.ToString(ds1);        
    return (ds2);
}

并从函数 AutoRefresh() 中删除这一行

setTimeout("location.reload(true);", 60000);

希望能帮助到你 :)

于 2013-01-07T10:13:33.600 回答
0

首先,您需要确定您的方法。这可以通过两种方式完成。

  1. 每隔x几秒钟轮询一次服务器,看看值是否发生变化。为此,您可以使用 AJAX 调用AJAX Web ServicePageMethods。在这两种情况下,您都无法访问页面中的控件。如果您想访问控件,您的整个页面事件生命周期将触发(这是您当前的问题)。

  2. 让您的服务器向您的客户端发出该值已更改的信号。这可以通过各种技术来完成。最好的方法是使用SignalR库。

使用 SignalR 将帮助您轻松扩展应用程序。

于 2013-01-07T06:31:02.143 回答
0

如果您想通过使用 ASP.NET AJAX 来实现这一点,您可以使用 UpdatePanel 和 Timer Controls,这里有一个教程教程:如何按时间间隔刷新 UpdatePanel 控件,否则您可以使用 jQuery Ajax。

于 2013-01-07T10:51:40.543 回答
-1

尝试使用 Page.IsPostBack 属性

于 2013-01-07T06:28:23.590 回答