我想使用Ajax提交一个表单(Html.BeginForm())。根据this question的说法,它应该能工作!我不明白为什么动作SendEmail()中的参数'email‘不能从js获得值。你能帮帮我吗?
我的观点:
<% using (Html.BeginForm("SendEmail", null, FormMethod.Post, new { @class = "form", @id = "formSendMail" }))
{ %>
<fieldset>
<ul>
<li>
<label for="MailFrom">
De...</label>
<%= Html.TextBox("MailFrom", Session["email"].ToString(), new { @id = "MailFrom", @Name = "MailFrom", @readonly = "readonly" })%>
</li>
<li>
<label for="MailTo">
A...</label>
<%= Html.TextBoxFor(m => Model.Agent.Email, new { @id = "MailTo", @Name = "MailTo" })%>
</li>
<li>
<label for="MailSubject">
Objet :</label>
<%= Html.TextBoxFor(m => Model.MailSubject, new { @id = "MailSubject", @Name = "MailSubject" })%>
</li>
<li>
<label> </label>
<%= Html.TextArea("MailBody", Model.MailBody, 5, 10, null)%>
</li>
</ul>
</fieldset>
<% } %>我的控制器:
[HttpPost]
public ActionResult SendEmail(Email email)
{
if (email != null)
{
if (!string.IsNullOrEmpty(email.MailBody) & !string.IsNullOrEmpty(email.Subject) & !string.IsNullOrEmpty(email.To))
{
using (IEmailDal emailDal = new EmailDal())
{
emailDal.SendEmail(email);
}
return Json("Email envoyé", JsonRequestBehavior.AllowGet);
}
else
return Json("Error");
}
else
return Json("Error");
}我的电子邮件课:
public class Email
{
public string From { get; set; }
public string To { get; set; }
public string Subject { get; set; }
public string MailBody { get; set; }
}为了提交表单,我通过jquery.dialog中的一个按钮模拟提交操作:
$("#mail-form").dialog({
buttons: {
"Envoyer le mail": function () {
$("#formSendMail").submit();
}
}
});我的javascript:
$('#formSendMail').submit(function (e) {
var myEmail = {
From: $('#MailFrom').val(),
To: $('#MailTo').val(),
Subject: $('#MailSubject').val(),
MailBody: $('#MailBody').val()
};
$.ajax({
type: "POST",
url: '<%= Url.Action("SendEmail", "Messages") %>',
data: JSON.stringify(myEmail),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
alert("Mail envoyé.");
},
error: function (result) {
alert("Echec lors de l'envoi du mail.");
}
});
return false;
});谢谢!
发布于 2015-10-13 10:46:55
以下是答案(谢谢斯蒂芬·穆克):
我只需要删除contentType: "application/json; charset=utf-8",,然后就不需要压缩数据了:
$.ajax({
type: "POST",
url: '<%= Url.Action("SendEmail", "Messages") %>',
data: myEmail,
dataType: "json",
success: function (result) {
alert("Mail envoyé.");
},
error: function (result) {
alert("Echec lors de l'envoi du mail.");
}
});现在,为什么它一开始就不管用,我不知道!
发布于 2015-10-13 10:53:54
如果操作方法运行正确,则您的问题是URL的错误路径-- .This是正确的URL。
url: '@Url.Action("SendEmail", "SampleController")',调用SendEmail的第一个参数是操作方法,第二个参数称为包含SendEmail方法的SampleControl。
发布于 2015-10-13 11:35:51
为什么要处理提交事件--如果这是弹出按钮--然后直接处理它,我的意思是通过Ajax直接发布它,如果您使用的是JSON.Stringify,那么在Action上这样处理它:
[HttpPost]
public ActionResult SendEmail(string email)
{
Email formData = new JavaScriptSerializer().Deserialize<Email>(email);
//Now you have the object handle it how you want
}https://stackoverflow.com/questions/33099755
复制相似问题