如何通过Ajax JSON将表单数据发送到我的cs页面的WebMethod?

时间:2016-01-14 05:33:29

标签: jquery asp.net json ajax webmethod

我正在尝试通过jquery.ajax和json将表单数据发送到webmethod但是我无法在日志中发送或获取任何错误。任何人都可以指导我通过这个或我在哪里出错? .ajax方法没有执行并给出和警告" undefined" ?

    function Submit() {
    debugger;
    var advantages = [];
    var features = [];
    var Elig_crit = [];
    var Elig_value = [];

    $('#AdvantagesContainer .Advantages').each(function () {

        //var txtAdvantages = $(".Advantages")
        //for (var i = 0; i < txtAdvantages.length; i++) {


        advantages.push($(this).val());

        //}
    });

    $('#FeaturesContainer .Features').each(function () {


        features.push($(this).val());
    });


    $('.Eligibility .EligibilityCrit_TxtBox').each(function () {

        Elig_crit.push($(this).val());

    });


    $('.Eligibility .EligibilityVal_TxtBox').each(function () {

        Elig_value.push($(this).val());
    });

    debugger;
    var objData = { Category: $('#ddlInsCategory option:selected').val(), Company: $("#ddlCompanyName option:selected").val(), PlanName: $("#<%=txtPlanName.ClientID%>").val(), PlanDesc: $("#<%=txtPlanDesc.ClientID%>").val(), features: features, advantages: advantages, Criteria: Elig_crit, Value: Elig_value }
    //var jsonData = JSON.stringyfy({ objData: objData }); 
    debugger;
    $.ajax({
        type: "POST",
        url: "Edit.ascx/Save",
        data: objData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: OnSuccess,
        error: function (response) {
            alert(response.d);
        }
    });
}

function OnSuccess(response) {
    alert("Success");
}

目前我还没有将任何代码写入我的webmethod。我刚刚制作了骨架,看看json会抛出什么数据。

    [WebMethod]
    public static void Save(object objData)
    {


    }

2 个答案:

答案 0 :(得分:1)

您可以在服务器端创建强类型。这将具有适当的映射以及使用jQuery ajax的非常简单和推荐的方法。

只需在服务器端创建一个自定义类型,其属性名称与Javascript对象中u.seek(0)的属性名称相匹配(确保您具有相同的名称并相应地更改数据类型): -

key

然后,更改您的public class Foo { public string Category { get; set; } public string Company { get; set; } public string PlanName { get; set; } public string PlanDesc { get; set; } public List<string> features{ get; set; } public List<string> advantages { get; set; } public List<string> Criteria{ get; set; } public List<string> Value{ get; set; } } 以接受此类型作为参数: -

WebMethod

最后从客户端发送JSON数据: -

[WebMethod]
public static void Save(Foo objData)
{


}

答案 1 :(得分:0)

有几种方法可以实现这一目标:

因为您已标记了WebMethod。您可以将scriptManager添加到服务器端表单,这将使客户端的所有WebMethod都可用。

使用scriptManager

  1. 将脚本管理器添加到服务器端表单
  2. 如果您使用的是友好网址,则需要手动添加网页扩展名。您的RouteConfig设置RedirectMode.Off中的 ALSO ,如果您有redirectMode.permanent,则您的ajax调用将失败。

            if (stringEndsWith(PageMethods.get_path(), "aspx")) {
            } else {
                PageMethods.set_path(PageMethods.get_path() + '.aspx');
            };
    
  3. 使用PageMEthods直接从您的javascript调用您的WebMethod。

    PageMethods.FN_TEST(your_parameter, onSucess, onError);
                function onSucess(result) {
                    alert(result);
    
                },
                function onError(result) {
                    alert('Something wrong.');
                }
    

    您的信息页:

    using System.Web.Services;
    using System.Web.Script.Services;
    

    通过添加ScriptService

    来允许您的网页处理脚本服务
    [ScriptService]
    public partial class your_page : System.Web.UI.Page{
    

    ...和您的网络方法

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static void FN_TEST(string iParam)
    {
        return "You have sent me " + iParam;
        // Your result will be JSONised and look like this {d:Json_object}
        //
    
    }}
    

    **使用Ajax帖子** 假设您的WebMethod设置如上。你的ajax调用将如下所示:

    "ajax": {
                "type": "POST",
                "contentType": "application/json",
                "dataFilter": function (data) {
                    // as web methods return {d:object} this method gets rid of the extra d container in your result set.
                    var msg = eval('(' + data + ')');
                    if (msg.hasOwnProperty('d'))
                        return msg.d;
                    else
                        return msg;
                },
                "dataType": "json",
                "url": "your_page.aspx/FN_TEST", // your web methode
    
                "data": function (d) {
                    // add your params here,
                    return JSON.stringify({ iParam: $("#your_field").val()});
                },
                "success": function (data) {
                    // do something with your result
    
                },
    
    
            },
    

    如果你想自定义更多,你可以JSONise所有的表单字段,作为字符串发送,在你的web方法中将字符串解析回JSON并处理继续你的东西。

    修改 上面的代码不是完整的代码,根据您的需要进行修改 哦顺便说一句..如果您使用回发,您可以在request.form集合中检索您的表单域。我假设你对这个

    不感兴趣