Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过JavaScript将值从C#添加到DIV_C#_Javascript - Fatal编程技术网

通过JavaScript将值从C#添加到DIV

通过JavaScript将值从C#添加到DIV,c#,javascript,C#,Javascript,聊天脚本的最后一个模块是将值从C#code传递到JavaScript,JavaScript会将值传递到DIV。在我使用DataBinder之前,但直接使用它时,C#code由AJAX的更新面板执行。现在,我需要一组数组值通过Timer Tick函数传递给JavaScript。如何使用将数组从C#传递到JavaScript。下面是我代码的一部分 protected void Timer1_Tick(object sender, EventArgs e) { if (MyCo

聊天脚本的最后一个模块是将值从C#code传递到JavaScript,JavaScript会将值传递到DIV。在我使用DataBinder之前,但直接使用它时,C#code由AJAX的更新面板执行。现在,我需要一组数组值通过Timer Tick函数传递给JavaScript。如何使用
将数组从C#传递到JavaScript。下面是我代码的一部分

protected void Timer1_Tick(object sender, EventArgs e)
    {
        if (MyConnection.State == System.Data.ConnectionState.Open)
        {
            MyConnection.Close();
        }
        MyConnection.Open();
        OdbcCommand cmd = new OdbcCommand("Select message from messages where name=?", MyConnection);
        cmd.Parameters.Add("@email", OdbcType.VarChar, 255).Value = "human";
        OdbcDataReader dr = cmd.ExecuteReader();
        ArrayList values = new ArrayList();
        while (dr.Read())
        {
            string messagev = dr[0].ToString();
            // What should I do here?
        }
        MyConnection.Close();
    }
我不希望将值直接发送到DIV。首先它必须发送到JavaScript,然后它必须发送到DIV

了解更多信息


我需要C#从后端检索数据,并将数据从JavaScript传递到客户端(即JavaScript),它必须转发到DIV层。

假设您的DIV的ID是div1,您可以执行以下操作

div1.Controls.Add(new LiteralControl(dr[0].ToString()) + "<br />");
div1.Controls.Add(新的LiteralControl(dr[0].ToString())+“
”;

这将把消息文本附加到Div中。有两种方法可以在javascript代码中添加内容。您可以从javascript发出ajax调用,让服务器返回您需要的内容(作为普通字符串或JSON)。或者,您可以根据原始请求在服务器上动态构建javascript代码。
看看你的代码,我认为第一种方法是可行的。因此,不要在服务器上使用计时器函数,而是在javascript中编写一个计时函数,并通过ajax轮询服务器以获取新消息。

您可以尝试RegisterStartupScript调用javascript函数,在调用时传递'messagev'变量


请参阅此处的更多信息:

我将建议使用JQuery方法并去掉服务器端计时器。使用JQuery和JQuery.Timer插件:在我看来,你可以更轻松地完成这项工作,而且在客户端会更好

在aspx页面中,您有要显示输出的元素:

<span id="status" style="display:none"></span>

希望这是有道理的。我创建了一个web服务器(asmx),并创建了服务器端代码以返回字符串。在aspx标记中,我使用JQuery启动计时器10秒,然后使用.ajax post轮询服务,检索消息并显示它。从我的角度看,没有页面刷新,更不用说黑客了。

只是一个想法;您可以使用Flash或小程序与javascript进行套接字通信。
在此处可以找到Flash的websocket实现:。可能很适合聊天,但可能有点过头了,这要看情况而定。

我建议您使用长轮询来获取推送通知。 从中了解长轮询

您可以找到一个很好的例子,它解释了服务器端和客户端。 如果您使用的是HTML5,我建议您看看


对于服务器端技术,您可以使用C#,但是某个Node.js为此类工作发出了正确的噪音

如果您在页面上使用了一个隐藏的HTML控件,该控件是在Timer1#Tick方法中设置的,并使用该控件读取javascript函数中的值,该怎么办。
hiddenControl.Text=dr[0].ToString()
然后在javascript函数中
var data=document.getElementById('hiddenControl')。value

然后在这里,你可以随意将数据添加到你的div中

使用ScriptManager创建和注册客户端脚本块

 ScriptManager.RegisterClientScriptBlock(
                this.Page,
                this.GetType(),
                "WebUserControlSript",
                "FunctionABC('" + messagev + "')",
                true);
在.aspx页面中使用以下javascript:

FunctionABC(message)

{
     append "message" to div here..
}
谢谢

问候,


Dhaval Shukla

这是个好主意,但我得到一个错误
名称“div1”在当前上下文中不存在
当然我的DIV名称是div1。@Madcoder。在您的div1中添加runat=“server”,如下所示:。@GuilhermeJSantos,Shai-谢谢!它可以工作,但是当使用
+”
时,我得到一个错误
无效参数
当我删除它时,它可以工作,但是没有新行可以分开。是的,通过更改
控件。添加(新的LiteralControl(dr[0].ToString()+“
”)以上代码有效。但是对于我的功能,我需要JavaScript作为中介。你可以在那篇博文中提问:JavaScript和HTML是同一层。
DIV
标记就是HTML标记中的标记。对ASP.Net应用程序进行AJAX调用,返回序列化数据(JSON或XML),然后使用Javascript填充DIV。在我看来,这只是次优的,有一个服务器端计时器。。。除非只有2-3个人会使用这个。如果signar不起作用,至少应该使用客户端轮询+AJAX。这可能会使问题变得更复杂!我不会将数据库调用作为web请求处理程序的一部分。它通常是不可伸缩的。我将保留基于OPs定时器的DB请求代码,但让它填充某种缓存。对于上面添加的ajax调用,让webmethod从缓存中获取数据。同意,但是出于问题的目的,我不想偏离原始的db实现太远,只选择将他已经编写的服务器端代码复制/粘贴到web方法中。通常是服务器端代码错误,因此您应该查看您已经实现的web方法或web服务。另外,请检查CustomErrors web.config设置,这样您就可以获得完整的错误详细信息,而不仅仅是一般的“内部服务器错误”。谢谢您的代码Mr.Dhaval。在客户端,这个代码
函数functionbc(message){var elem=document.getElementById('div1');elem.innerHTML=message;}
就足够了吗?但是这个JavaScript不起作用,你能帮我构建它吗?你能用下面的代码试试吗:function FunctionABC(message){alert(message);$('#abc').html(message);}您应该在form标记之外编写div,以使其工作。请注意,在上面给出的注释示例中,我已在单击按钮时注册了clientscript。您给出的正在工作,但它只能从数据库中检索第一个值。但是如何检索所有值呢?一个解决方法是您可以
 ScriptManager.RegisterClientScriptBlock(
                this.Page,
                this.GetType(),
                "WebUserControlSript",
                "FunctionABC('" + messagev + "')",
                true);
FunctionABC(message)

{
     append "message" to div here..
}