如何循环通过POST变量发送到ASP.JQuery . NET WebMethodajax方法



我用HTML按钮创建了一个检查表,在点击时在'选定'和'未选定'类之间切换。每个选项都有一个与之相关的ID和一个可选的注释输入。

我试图使用JQuery $.ajax()方法与POST发送所选按钮的id和相关的评论。我的想法是创建一个键/值集合的id选择和他们各自的评论当'保存'被点击,像这样:

selections = "{id1: 'comment1', id2: 'comment2', ...}"

然后像这样传递给$.ajax()方法的数据部分:

$.ajax({
     type: "POST",
     url: "MyPage.aspx/MyMethod"
     data: selections,
     contentType: "application/json; charset=utf-8",
     dataType: "json",
     success: function(msg) {
       onSuccess(msg);
     }
});

最后通过循环HttpContext.Current.Request.Form来访问MyMethod中的选择。

但是当我尝试这个,HttpContext.Current.Request.Form总是空的。我的方法错了吗?如果是,为什么?有人能提出另一种方法吗?

任何帮助都将非常感激。提前感谢!

另外,我知道从JQuery AJAX API调用服务器方法的4种方法:

  1. 页面方法(在.aspx页面中使用[WebMethod]修饰符的静态方法)
  2. .aspx页面Page_Load方法之间的切换语句
  3. .ashx页面ProcessRequest中方法之间的切换语句
  4. <
  5. Web服务/gh>

哪种方式最有效?我假设2会涉及一个不必要的Page实例,所以不应该是这个实例。

选择变量应该是一个对象,而不是字符串。

var selections = { id1: 'a', id2: 'b' };

首先,确保你的选择变量是有效的JSON,你在你的问题中写的不是有效的JSON符号。

第二,在你的webmethod定义中,让MyMethod接收一个字符串作为参数;假设你声明它为

[WebMethod]
public MyMethod(string selections)
{
    //Do processing here
}

在方法的主体中。使用JavascriptSerializer反序列化Dictionary<string,string>中的字符串,例如:

JavascriptSerializer js = new JavascriptSerializer(); 
Dictionary<string,string> result = js.Deserialize<Dictionary<string,string>>(selections);

现在可以遍历字典中的元素了。

只是为了澄清,你的选择变量需要把每个属性都用引号括起来;在你的例子中,id1 id2…需要"id1":"评论"、"id2":"评论",等等。

编辑

添加代码来演示如何调用web服务。

var selections = "{'id1': 'comment1', 'id2': 'comment2'}";
$.ajax({
     type: "POST",
     url: "MyPage.aspx/MyMethod"
     data: JSON.stringify(selections),
     contentType: "application/json; charset=utf-8",
     dataType: "json",
     success: function(msg) {
       onSuccess(msg);
     }
});

作为最后一个建议,熟悉jsFiddle,它允许您快速测试。例如:

最新更新