我想通过邮件发送表单详细信息, 我试着用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类型它运行良好
你认为我的问题是什么..
答案 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;
}