1

我想通过邮件发送表单详细信息,我尝试用 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 类型它工作得很好

你觉得我的问题是什么。。

4

1 回答 1

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;
}
于 2013-10-30T13:34:32.687 回答