如何使用 Web 表单(不是 MVC 或 asmx 页面)从 ajax Http POST 获取 c# 服务器端的复选框
本文关键字:POST Http ajax 获取 复选框 服务器端 页面 表单 Web 何使用 不是 | 更新日期: 2023-09-27 18:36:05
好的。我会再试一次。我没走多远。我对ajax和jQuery很陌生。
甚至试图看看我是否可以在服务器上获取文件管理器值,但无济于事。另外,我不想使用asmx页面,所以我想我不能使用Web方法。
我只是尝试获取具有适当检查值的帖子 URL,以便我可以在服务器上解析它。每次我选中复选框时,它都应该将所有选中的值发送到服务器。但是,我在获取 URL 时遇到问题。filterValues 应该保存一个查询字符串,如 name=value&name=value&name...。当我运行开发人员控制台时,它确实在有效负载中显示了这一点。它确实发布了正确的数据。但是当我测试是否可以在服务器上访问它时,它一直在 ajax 中点击错误函数。我使用的是网络表单应用程序,而不是 MVC 和 asmx 页面。另外,我是ajax及其行为的新手。谢谢。
编辑:
我已经找到了解决方案。事实证明,我需要发布表单数据,而不是任何其他类型的有效负载。
使用 ajax 调用时应考虑点
数- url:PageName/functionName(AjaxSubmit) AjaxSubmit 应该是静态的 [WebMethod]
- 如果要将任何参数传递给该 [WebMethod],则两个文件中的参数名称应相同。3.如果要将数组从客户端传递到该WebMethod,则Webmethod的参数将是List
这个答案应该有帮助: https://stackoverflow.com/a/4508430/853295
以下是季米特洛夫@Darin回答的副本
如果要在经典 WebForms 应用程序中调用代码隐藏中的方法,可以使用 PageMethods:
[WebMethod]
public static string GetDate()
{
return DateTime.Now.ToString();
}
然后调用该方法:
$.ajax({
type: 'POST',
url: 'PageName.aspx/GetDate',
data: '{ }',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function(msg) {
// Do something interesting here.
}
});
这是我为您编写的完整工作示例:
将此方法添加到代码隐藏中:
[WebMethod]
public static string SayHello(List<string> names)
{
var str = "hello ";
for (var i=0; i<names.Count; i++)
{
str += (names[i] + ", ");
}
return str;
}
将此添加到 aspx 文件中。
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
<script type="text/javascript">
var myArr = ["John", "Fred", "Sam"];
$(function () {
$.ajax({
type: 'POST',
url: 'test.aspx/sayhello',
data: "{ 'names': " + JSON.stringify(myArr) + "}",
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
// Notice that msg.d is used to retrieve the result object
alert(msg.d);
}
});
});
</script>
</head>
<body>
<form id="Form1" runat="server">
</form>
</body>
</html>
PageMethods 不限于简单的参数类型。您可以使用任何类型作为输入和输出,它将自动进行 JSON 序列化。
我已经找到了解决方案。事实证明,我需要发布表单数据,而不是任何其他类型的有效负载。
$(function () {
$("#chkFilter").on("click", "input", function (e) {
var filterCheckboxes = new Array();
$("#chkFilter").find("input:checked").each(function () {
filterCheckboxes.push(" " + $(this).prop("name") + "=" + $(this).val() + ", ");
});
filterObj = {};
filterObj.action = "updateProjects";
filterObj.list = filterCheckboxes;
var filtersStringify = JSON.stringify(filterObj)
$.ajax({
url: "/api/project/",
type: "POST",
data: filtersStringify,
}).done(function (response) {
//some stuff to do
});
});
});
if (Request.HttpMethod == "POST")
{
// get json out of body
var serializer = new JsonSerializer();
var sr = new StreamReader(Request.InputStream);
var jtr = new JsonTextReader(sr);
dynamic data = serializer.Deserialize(jtr);
if (data.action == "getProjects")
{
getProjects(data);
}
if(data.action =="updateProjects")
{
updateProjects(data);
}
}
else
{
}
}
public void getProjects(dynamic data)
{
//do stuff with the data
}