我想创建一个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>
型
1条答案
按热度按时间o8x7eapl1#
好吧,所以它根本不清楚这是什么/如何/为什么/从哪里来的:
字符串
我的意思是,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代码:
型
代码beind(web方法)
型
注意非常接近上面,来自客户端JavaScript的参数与上面c#函数中定义的参数的确切名称匹配。
请注意,顺序并不重要,重要的是参数存在,并且与web方法中的defines参数匹配。
当然,有些JavaScript代码本可以减少,但我额外增加了几行代码,以说明其工作原理。
运行以上结果:
x1c 0d1x的数据