使用Ajax向aspx页面提交表单详细信息

时间:2013-10-29 15:49:47

标签: asp.net ajax post webforms

我想通过邮件发送表单详细信息, 我试着用Json做它并且它工作得很好 我试图用POST,通过发送表格细节,如在GET 我在HTML文件中写了这段代码

     function ContactPageAjax() {

     $.ajax(
{
    type: "POST",
    url: "Process.aspx/SendMailPost",
    data: $("#myForm").serialize(),
    dataType: "POST",

    error: function () {
        alert('Error');
    },
    success: function (res) {
        document.getElementById("thanks").style.visibility = "visible";
        document.getElementById("contactForm").style.visibility = "hidden";
        alert("ok");
    } 
});
 }

和aspx文件中的代码:

[WebMethod(EnableSession = false)]
public static void SendMailPost(String formVars)

{//email send code}

我试图将String更改为Object以及其他一些类型,似乎问题就在那里,但我不确定,当我运行它时,ajax调用返回成功。 但是邮件的代码没有运行,如果我使用Json类型它运行良好

你认为我的问题是什么..

1 个答案:

答案 0 :(得分:1)

您可以将表单数据发布到aspx中的web方法,将表单数据序列化为数组,将其字符串化为json

在服务器端,您必须创建包含名称值对的自定义类型,并且页面方法的参数将是该自定义类型的数组。原因是,json序列化数组应该能够反序列化为web方法的参数,以便进行ajax调用。

  function btnclick() {
        var array = $("#form1").serializeArray();
        $.ajax({
            type: "POST",
            url: "PageMethodTest.aspx/TestFormPost",
            data: JSON.stringify({ 'namevaluepair': $("#form1").serializeArray() }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: fnsuccesscallback,
            error: fnerrorcallback
        });
    }

    function fnsuccesscallback(data) {
        alert(data.d);

    }
    function fnerrorcallback(result) {
        alert(result.statusText);
    }



    </script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager EnablePageMethods="true" runat="server">
    </asp:ScriptManager>
    <div>
        <table runat="server">
            <tr>
                <td>
                    <label id="lblName" runat="server" title="Name">
                        Name</label>
                </td>
                <td>
                    <input type="text" id="txtName" runat="server" />
                </td>
            </tr>
            <tr>
                <td>
                    <label id="lblCompany" runat="server" title="Company">
                        Company</label>
                </td>
                <td>
                    <input type="text" id="txtCompany" runat="server" />
                </td>
            </tr>
        </table>
        <input type="button" style="width: 104px" value="Submit" onclick="btnclick();" />
    </div>
    </form>

服务器代码:

 [WebMethod, ScriptMethod]
    public static String TestFormPost(NameValue[] namevaluepair)
    {
        StringBuilder builder = new StringBuilder();
        foreach(NameValue nvp in namevaluepair)
        {
            builder.Append(nvp.Name + ": " + nvp.Value + ";"); 
        }
        return builder.ToString();
    }
}

 public class NameValue
{
    public String Name;
    public String Value;
}