1

フォームの詳細をメールで送信したいのですが、Json で実行しようとしましたが、GET のようにフォームの詳細を送信することで、POST で試してみるとうまくいきました。このコードを 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

フォーム データを配列にシリアル化し、それを json に文字列化することで、フォーム データをaspx の Web メソッドに投稿できます。

サーバー側では、名前と値のペアを含むカスタム タイプを作成する必要があり、ページ メソッドのパラメーターはそのカスタム タイプの配列になります。その理由は、json のシリアライズされた配列は、ajax 呼び出しが発生する Web メソッドのパラメーターにデシリアライズできる必要があるためです。

  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 に答える