如何使用 Web 表单(不是 MVC 或 asmx 页面)从 ajax Http POST 在服务器端获取选中的复选框值?
How to obtain checked checkbox values on the serverside in c# from an ajax Http POST using web forms (not MVC or asmx pages)?
好的。我会再试一次。 我对 ajax 和 jQuery 很陌生。
甚至试图查看我是否可以在服务器上获取 filerValues,但无济于事。另外,我不想使用 asmx 页面,所以我想我不能使用 web 方法。
我只是想获取具有适当检查值的 post URL 以便我可以在服务器上解析它。每次我选中一个复选框时,它应该将所有选中的值发送到服务器。但是,我在获取 URL 时遇到了问题。 filterValues 应该包含一个查询字符串,如 name=value&name=value&name.... 当我运行开发人员控制台时,它确实在有效负载中显示了这一点。它确实是 posting 正确的数据。但是当我测试我是否可以在服务器上访问它时,它一直在 ajax 中命中错误函数。我使用的是 Web 表单应用程序,不是 MVC 也不是 asmx 页面。另外,我是 ajax 及其行为的新手。谢谢
编辑:
我想出了解决办法。事实证明,我需要 post 表单数据,而不是任何其他类型的有效负载。
这个答案应该有帮助:
以下是@Darin Dimitrov 的回答副本
如果您想在经典 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 序列化。
使用ajax调用时应考虑积分
- url:PageName/functionName(AjaxSubmit) AjaxSubmit 应该是静态的 [WebMethod]
- 如果您想将任何参数传递给 [WebMethod],那么两个文件中的参数名称应该相同。
3.If 您正在将数组从客户端传递到该 WebMethod,那么 Webmethod 的参数将是列表
我想出了解决办法。事实证明,我需要 post 表单数据,而不是任何其他类型的有效负载。
$(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
}
好的。我会再试一次。
甚至试图查看我是否可以在服务器上获取 filerValues,但无济于事。另外,我不想使用 asmx 页面,所以我想我不能使用 web 方法。
我只是想获取具有适当检查值的 post URL 以便我可以在服务器上解析它。每次我选中一个复选框时,它应该将所有选中的值发送到服务器。但是,我在获取 URL 时遇到了问题。 filterValues 应该包含一个查询字符串,如 name=value&name=value&name.... 当我运行开发人员控制台时,它确实在有效负载中显示了这一点。它确实是 posting 正确的数据。但是当我测试我是否可以在服务器上访问它时,它一直在 ajax 中命中错误函数。我使用的是 Web 表单应用程序,不是 MVC 也不是 asmx 页面。另外,我是 ajax 及其行为的新手。谢谢
编辑:
我想出了解决办法。事实证明,我需要 post 表单数据,而不是任何其他类型的有效负载。
这个答案应该有帮助:
以下是@Darin Dimitrov 的回答副本
如果您想在经典 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 序列化。
使用ajax调用时应考虑积分
- url:PageName/functionName(AjaxSubmit) AjaxSubmit 应该是静态的 [WebMethod]
- 如果您想将任何参数传递给 [WebMethod],那么两个文件中的参数名称应该相同。 3.If 您正在将数组从客户端传递到该 WebMethod,那么 Webmethod 的参数将是列表
我想出了解决办法。事实证明,我需要 post 表单数据,而不是任何其他类型的有效负载。
$(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
}