从javascript调用c#.net函数
我正在使用C#.net创建应用程序。从javascript调用c#.net函数,c#,javascript,asp.net,C#,Javascript,Asp.net,我正在使用C#.net创建应用程序。 数据库中的数据一更新,我就试图更新我的页面。 我已将数据库中的一个值存储在一个标签中,每次我都调用一个函数,该函数将相同的值存储在另一个标签中,然后我将两个标签进行比较。代码为 我的网页是.aspx.cs public partial class _Default : System.Web.UI.Page { SqlConnection con = new SqlConnection(); protected void Page_Load(o
数据库中的数据一更新,我就试图更新我的页面。
我已将数据库中的一个值存储在一个标签中,每次我都调用一个函数,该函数将相同的值存储在另一个标签中,然后我将两个标签进行比较。
代码为 我的网页是.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();
}
函数AutoRefresh(){
document.getElementById(“”).innerHTML=“”;
var res=''
如果(res==1){
警惕(“相同”);
setTimeout(“location.reload(true);”,60000);
}
否则{
警报(“不同”)
abx();
}
}
函数abx(){
自动刷新();
}
但是有一个问题,当我调用codebehind函数时,它正在执行整个后端代码,因此两个标签的值会同时更新。
我只想每次调用代码隐藏函数,只想更新label2的值一次。
有人能告诉我怎么做吗。你不能从JavaScript调用C函数-如果可能的话,想象一下那些有恶意的人会怎么做 您需要在这里使用Ajax,并从web表单发布/获取信息 JavaScript代码除了重新加载页面外什么都不做——这意味着将发生一个完整的页面加载周期,因此所有代码都在执行。您还混淆了客户端和服务器端代码,并且误解了ASPX引擎如何呈现其内容 我使用(您可以不使用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函数的页面。稍后我会发布更多信息
你真的需要弄清楚JavaScript和C#之间的区别,首先,在你尝试做像定时AJAX回调这样复杂的事情之前——你的标记在HTML输出到客户端之前呈现,而且客户端完全看不到您的C#类或其方法。请尝试使用Page.IsPostBack属性。首先,您需要确定您的方法。这可以通过两种方式实现
x
秒轮询服务器一次,以查看值是否更改。为此,可以使用AJAX调用a或a。在这两种情况下,您都无法访问页面中的控件。如果要访问控件,将触发整个页面事件生命周期(这是您当前的问题)使用SignalR将帮助您轻松扩展应用程序。相应地更新代码:
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()中删除该行
希望对您有所帮助:)如果您想通过使用ASP.NET AJAX实现这一点,您可以使用UpdatePanel和计时器控件,下面是一个教程,否则您可以使用jQuery AJAX。当您调用abx()时,会在AutoRefresh()中创建一个无限(永无止境)循环;看来你需要AJAX@sajanyamaha我希望页面定期检查数据库中的任何更新,这就是我使用此循环的原因如果要刷新整个页面,为什么需要存储以前的值和更新的值,然后进行比较?为什么你不能在没有逻辑的情况下刷新页面,这会给你更新的值。不过,你对浏览器(客户端)如何与服务器交互感到非常困惑。请参阅Spikh的答案。值得注意的是,如果没有更复杂的推/拉实现,您的页面将不会在数据库中发生更改时立即更新。您必须每隔一段时间进行ajax调用,以检查是否有更新的值,因此本质上,您将有大量不必要的ajax请求,尤其是在数据库不经常更新的情况下。是的,如果您需要让服务器控制您的客户机,那么SignalIR就是一种方法,由于JS/C#实现会变得非常复杂,非常快。很抱歉,它仍然在调用CodeBehind()时再次执行整个代码。@user1852933:var res=''的结果是什么?我认为location.reload(true)导致了完整的回发,这就是Page#Load中的整个代码再次执行的原因。setTimeout(添加“location.reload(true);”,60000);行是为了每隔60秒检查数据库是否有更新。删除它不会解决问题,但codebehind()也会检查数据库是否有更改,您不需要重新加载页面,这将重置所有控件及其值。
setTimeout("location.reload(true);", 60000);