簡體   English   中英

ASP.Net MVC,使用JQuery.Ajax提交表單

[英]ASP.Net MVC, submit form with JQuery.Ajax

我想使用JQuery Ajax提交表單(Html.BeginForm())。 根據這個問題 ,它應該工作! 我不明白為什么來自動作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>&nbsp;</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;
});

謝謝 !

這是答案(感謝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.");
    }
});

現在,為什么它首先不起作用,我不知道!

如果操作方法運行正確,則問題是URL的錯誤路徑。這是正確的URL。

 url: '@Url.Action("SendEmail", "SampleController")',

調用SendEmail的第一個參數是你的action方法,第二個參數叫做包含SendEmail方法的SampleControl。

為什么要處理提交事件,如果這是彈出按鈕然后直接處理它,我的意思是直接用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
}

請更改與您的文本框字段名稱相同的電子郵件類屬性的名稱,然后您將獲得控制器中的值。

public class Email
{
    public string MailFrom { get; set; }
    public string MailTo { get; set; }
    public string MailSubject { get; set; }
    public string MailBody { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM