我想使用JQuery Ajax提交表单(Html.BeginForm())。 根据{{3}},它应该工作! 我不明白为什么来自动作SendEmail()的参数'email'没有从js获取值。 你能帮我吗?
我的观点:
(//td[<expr>])[<array offset>]
我的控制器:
<% 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");
}
要提交表单,我通过jquery.dialog中的按钮模拟提交操作:
public class Email
{
public string From { get; set; }
public string To { get; set; }
public string Subject { get; set; }
public string MailBody { get; set; }
}
我的javascript:
$("#mail-form").dialog({
buttons: {
"Envoyer le mail": function () {
$("#formSendMail").submit();
}
}
});
谢谢!
答案 0 :(得分:1)
这是答案(感谢Stephen Muecke):
我只需删除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.");
}
});
现在,为什么它首先不起作用,我不知道!
答案 1 :(得分:0)
如果操作方法运行正确,则问题是URL的错误路径。这是正确的URL。
url: '@Url.Action("SendEmail", "SampleController")',
调用SendEmail的第一个参数是你的action方法,第二个参数叫做包含SendEmail方法的SampleControl。
答案 2 :(得分:0)
为什么要处理提交事件,如果这是弹出按钮然后直接处理它,我的意思是直接用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
}
答案 3 :(得分:0)
请更改与您的文本框字段名称相同的电子邮件类属性的名称,然后您将获得控制器中的值。
public class Email
{
public string MailFrom { get; set; }
public string MailTo { get; set; }
public string MailSubject { get; set; }
public string MailBody { get; set; }
}