jquery 如何对C#文件进行自动调用

41ik7eoe  于 12个月前  发布在  jQuery
关注(0)|答案(1)|浏览(128)

我想创建一个aspx文件,其中包含一个指向C#文件中的方法的aplog调用,后者运行对数据库的查询并将数据返回到aspx文件,以示例化jQuery中的dataTable对象。
我已经在2个文件中写了一些东西,但我不知道如何继续下去,即使在互联网上我也很难理解如何做到这一点。
我需要知道我应该给予哪个对象或变量来响应aspx文件中进行的示例化dataTable对象的aplog调用,并且我需要理解为什么在我的特定情况下我不能通过aplog调用与GetData函数进行通信。
我是这么做的:
-JavaScript代码

var pageUrl = '<%=ResolveUrl("~/Sph_table_00.aspx/GetData")%>';
$(function () {
new DataTable('#example', {
    ajax: {
        "type": 'POST',
        "url": pageUrl,
        "contentType": 'application/json; charset=utf-8',
        "dataType": 'json',
        "success": function (msg) {
            alert("Success: " + msg.d);
            
            //EXAMPLE
            let out = [];
            for (var i = 0; i < 5; i++) {
                out.push([i + '-1', i + '-2']);
            }

            setTimeout(() => {
                callback({
                    draw: data.draw,
                    data: out,
                    recordsTotal: 5000000,
                    recordsFiltered: 5000000
                });
            }, 150);
        }
    },
    processing: true,
    ordering: false,
    scroller: true,
    scrollY: 200,
    searching: false,
    serverSide: true
});
}

字符串

  • C#代码
public partial class Sph_table_00 : System.Web.UI.Page
{
    [WebMethod]
    public void GetData()
    {
    if (Common.openConnOLEADODB(OLEConnectionSPHERA) != null)
{
    OLEConnectionSPHERA = Common.openConnOLEADODB(OLEConnectionSPHERA);

    string tabella = "";
    string titolo = "";
    string reparto = "";
    string p1 = "";
    string p2 = "";
    string p3 = "";
    string p4 = "";
    string p5 = "";

    Uri uri = new Uri(HttpContext.Current.Request.Url.AbsoluteUri);

    if (HttpUtility.ParseQueryString(uri.Query).Get("TABELLA") != null)
        tabella = HttpUtility.ParseQueryString(uri.Query).Get("TABELLA");

    if (HttpUtility.ParseQueryString(uri.Query).Get("TITOLO") != null)
        titolo = HttpUtility.ParseQueryString(uri.Query).Get("TITOLO");

    if (HttpUtility.ParseQueryString(uri.Query).Get("REPARTO") != null)
        reparto = HttpUtility.ParseQueryString(uri.Query).Get("REPARTO");

    if (HttpUtility.ParseQueryString(uri.Query).Get("P1") != null)
        p1 = HttpUtility.ParseQueryString(uri.Query).Get("P1");

    if (HttpUtility.ParseQueryString(uri.Query).Get("P2") != null)
        p2 = HttpUtility.ParseQueryString(uri.Query).Get("P2");

    if (HttpUtility.ParseQueryString(uri.Query).Get("P3") != null)
        p3 = HttpUtility.ParseQueryString(uri.Query).Get("P3");

    if (HttpUtility.ParseQueryString(uri.Query).Get("P4") != null)
        p4 = HttpUtility.ParseQueryString(uri.Query).Get("P4");

    if (HttpUtility.ParseQueryString(uri.Query).Get("P5") != null)
        p5 = HttpUtility.ParseQueryString(uri.Query).Get("P5");

    if (tabella == "" && titolo == "")
    {
        Response.Write("Nessun parametro");
        return;
    }

    if (reparto != "")
        Session["REPARTO"] = reparto;
    else if (reparto == "Azienda")
        reparto = "";
    else
        reparto = Session["REPARTO"].ToString();

    string queryMaster = $"select * from WEB_QUERY where tablename = '{tabella}'";

    if (Common.executeQuery(queryMaster, OLEConnectionSPHERA) != null)
        oleDbDataReader_QUERY = Common.executeQuery(queryMaster, OLEConnectionSPHERA);

    while (oleDbDataReader_QUERY.Read())
    {
        string query = oleDbDataReader_QUERY.GetValue(oleDbDataReader_QUERY.GetOrdinal("QUERYSELECT")).ToString().Replace("@PREP", reparto);
        //string query = "SELECT * from s_odl";

        if (Common.executeQuery(query, OLEConnectionSPHERA) != null)
            oleDbDataReader_CDL = Common.executeQuery(query, OLEConnectionSPHERA);

        for (int i = 0; i < oleDbDataReader_CDL.FieldCount; i++)
            ListaNomiColonne.Add(oleDbDataReader_CDL.GetName(i).ToString());

        while (oleDbDataReader_CDL.Read())
        {
            foreach (string field in ListaNomiColonne)
            {
                ListaDati.Add(oleDbDataReader_CDL.GetValue(oleDbDataReader_CDL.GetOrdinal(field)).ToString());
            }
        }
        oleDbDataReader_CDL.Dispose();
        oleDbDataReader_CDL.Close();
    }

    oleDbDataReader_QUERY.Dispose();
    oleDbDataReader_QUERY.Close();

    if (Common.closeConnOLEADODB(OLEConnectionSPHERA) != null)
        OLEConnectionSPHERA = Common.closeConnOLEADODB(OLEConnectionSPHERA);
}
    }
}

  • HTML
<table id="example" style="width:100%" class="table table-striped display nowrap">
<thead>
    <tr>
        <th>ID</th>
        <th>First name</th>
    </tr>
</thead>
</table>

o8x7eapl

o8x7eapl1#

好吧,所以它根本不清楚这是什么/如何/为什么/从哪里来的:

if (HttpUtility.ParseQueryString(uri.Query).Get("P4") != null)
    p4 = HttpUtility.ParseQueryString(uri.Query).Get("P4");

字符串
我的意思是,web方法调用(aQuery)的整体思想是你不必发布整个网页。当然,调用JUST web方法意味着这个端点必须传递它需要的任何数据。并且你不必使用ParseQuery,甚至不必解析出值(这一切都是自动完成的)。
所以,让我们做一个非常简单的web方法调用。我们将在网页上有3个文本框,分别是First,middle和Last Name。
然后我们将有一个第三个文本框作为结果的全名。web方法调用将被传递这3个值,并返回一个全名字符串放在全名文本框中。
注意web方法如何EXPECT一组已定义的参数。Web方法对当前网页上的控件没有任何线索。因此,web方法的上下文是静态的,因为它们不知道当前网页上的控件。
你传递的参数的使用也是如此。你看起来使用了P1到P4,但我没有看到在你的web方法调用中传递了这样的值(甚至在你的示例代码中也没有定义这些值)。
传递给web方法的值(参数)不能是猜测的。所以你要显式定义,设置和传递这些值。
因此,这很像从客户端JavaScript代码调用c#例程。因此,传递的参数和值必须正确设置,并且必须匹配c#函数参数(所谓的函数签名)。
所以,这个标记和jQuery代码:

<div style="width:30%">

            First Name:
            <asp:TextBox ID="txtFirst" runat="server" 
                CssClass="form-control" ClientIDMode="Static" >  
            </asp:TextBox>

            Middle Name:
            <asp:TextBox ID="txtMiddle" runat="server" 
                CssClass="form-control" ClientIDMode="Static" >  
            </asp:TextBox>

            Last Name:
            <asp:TextBox ID="txtLast" runat="server" 
                CssClass="form-control" ClientIDMode="Static" >  
            </asp:TextBox>

            <br />
            <asp:Button ID="cmdCombine" runat="server" Text="Combine into Fullname"
                CssClass="btn myshadow"
                OnClientClick="GetFullName();return false;"
                />
            <br />
            <br />
            Full Name:
            <asp:TextBox ID="txtFull" runat="server" 
                CssClass="form-control" ClientIDMode="Static" >  
            </asp:TextBox>

            <script>

                function GetFullName () {

                    var sFirst = $('#txtFirst').val()
                    var sMid = $('#txtMiddle').val()
                    var sLast = $('#txtLast').val()

                    var myParms = JSON.stringify({
                        FirstName: sFirst,
                        LastName: sLast,
                        MiddleName: sMid
                    })

                    var sURL = "AjaxTest1.aspx/FullName"
                    $.ajax({
                        type: "POST",
                        url: sURL,
                        contentType: "application/json; charset=utf-8",
                        data: myParms,
                        dataType: "json",
                        success: function (Data) {
                            $('#txtFull').val(Data.d)
                        },
                        error: function (xhr, status, error) {
                            var errorMessage = xhr.status + ': ' + xhr.statusText
                            alert('Error - ' + errorMessage)
                        }
                    });

                }

            </script>
        </div>


代码beind(web方法)

[WebMethod]
    public static string FullName(  string FirstName,
                                    string LastName,
                                    string MiddleName)
    {
        string sResult = "";
        sResult = $"{FirstName} {MiddleName} {LastName}";
        return sResult ;
    }


注意非常接近上面,来自客户端JavaScript的参数与上面c#函数中定义的参数的确切名称匹配。
请注意,顺序并不重要,重要的是参数存在,并且与web方法中的defines参数匹配。
当然,有些JavaScript代码本可以减少,但我额外增加了几行代码,以说明其工作原理。
运行以上结果:
x1c 0d1x的数据

相关问题