如何在ASP中处理多个回调.Net 4.0 c# ?的例子

本文关键字:Net 回调 ASP 处理 | 更新日期: 2023-09-27 18:15:44

我必须处理两个回调在一个页面上一个按钮事件和其他的列表。

当按钮'showDate'被点击它显示时间当按钮'btnlookup'被点击时,它会显示列表框项目的相应值。下面是我的代码HTML &cs文件

<head runat="server">
    <title></title>
    <script language="javascript">
        function ReceiveResults(arg, context) 
        {
            showDate.innerHTML = arg;
        }
        function LookUpStock() {
            var lb = document.getElementById("ListBox1");
            var product = lb.options[lb.selectedIndex].text;
            CallServer2(product, "");
        }
        function ReceiveServerData(rValue) {
            document.getElementById("ResultsSpan").innerHTML = rValue;
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <span id="showDate">aaa</span>
        </br>
        <input id="btnShowDate" type="button" value="getDate"  onclick="CallServer();"/>
    </div>
        <div>
      <asp:ListBox ID="ListBox1" Runat="server"></asp:ListBox>
      <br />
      <br />
      <button type="btnLookUP" onclick="LookUpStock()">Look Up Stock</button>
      <br />
      <br />
      Items in stock: <span id="ResultsSpan" runat="server"></span>
      <br />
    </div>
    </form>
</body>
.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 callback : System.Web.UI.Page, ICallbackEventHandler
{
   protected String returnValue;
   protected String myDate;
   protected System.Collections.Specialized.ListDictionary catalog;

    public String GetCallbackResult()
    {
        //return returnValue;
        return myDate;
    }
    public void RaiseCallbackEvent(String eventArgument)
    {
        myDate = System.DateTime.Now.ToLongTimeString();

        //if (catalog[eventArgument] == null) 
        //{
        //    returnValue = "-1";
        //}
        //else
        //{
        //    returnValue = catalog[eventArgument].ToString();
        //}
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        //For Time
        ClientScriptManager cSM = Page.ClientScript;
        String myCBRefrence = cSM.GetCallbackEventReference(this, "arg", "ReceiveResults", "context");
        cSM.RegisterClientScriptBlock(this.GetType(), "CallServer", "function CallServer(arg, context) {" + myCBRefrence + ";}", true);
        //callback back for listbox
            //String cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context");
            //String callbackScript = "function CallServer2(arg, context){ " + cbReference + ";}";
            //Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer2", callbackScript, true);
            //catalog = new System.Collections.Specialized.ListDictionary();
            //catalog.Add("monitor", 12);
            //catalog.Add("laptop", 10);
            //catalog.Add("keyboard", 23);
            //catalog.Add("mouse", 17);
            //ListBox1.DataSource = catalog;
            //ListBox1.DataTextField = "key";
            //ListBox1.DataBind();
    }
}

代码是评论是第二个回调事件,问题是在这段代码中,我只能引发一个回调,有人能告诉我我需要在代码中做什么改变,这样我就可以引发两个回调事件。

如何在ASP中处理多个回调.Net 4.0 c# ?的例子

这是一个个人建议:不要在c#代码中编写JavaScript。这会使非常混乱,非常难以快速调试。

如果你真的需要得到这些信息,你应该使用ASP。. NET Web服务(.asmx文件)。你可以使用JavaScript或jQuery调用这些Web服务(我自己更喜欢jQuery)。

如果我有一个.asmx文件,像这样:

[System.Web.Script.Services.ScriptService]
public class ServerTime : System.Web.Services.WebService
{
    [WebMethod]
    public string Get()
    {
        return System.DateTime.Now.ToLongTimeString();
    }
}
我将使用下面的jQuery代码调用它:
$.ajax({ type: "POST", dataType: "json", contentType: "application/json; charset=utf-8",
    url: "ServerTime.asmx/Get",
    success: function (result) {
        $("#showDate").html(result.d);
    }
});

请注意,success在最新版本的jQuery中已被弃用,但我在网上找不到done的好例子。