1

我正在构建一个 MVC,并且正在尝试我的第一个 ajax 调用。它所做的只是向控制器 Action Method 发送一个 int,它将一些数据保存到 DB,然后返回一个“成功保存”的视图。我知道 action 方法有效,因为我有一个 ActionLink 用 Get 发送 id,一切都很好。现在我需要将其切换为 Post,而 ActionLinks 不做 Post。所以我正在尝试ajax。

这是我的ajax:

 $(document).ready(function () {
    $("#button-save").click(function () {
        var applicantId = $("#PersonModel_ApplicantID").val();

        $.ajax({
            url: '<%: Url.Action("SaveRecord") %>',
            data: { 'id': applicantId },
            type: "post"
        });
    });
});

我知道它的这部分工作,但我需要有一个“成功”选项,因为现在“成功保存”页面没有显示。我看过一些不同的教程,老实说,成功的事情让我感到困惑。操作方法已全部设置为传递所需的消息:

        }
        else
        {
            return View("Error_RecordExists");
        }

        return View(model);

所以我想知道是否有办法告诉ajax(一旦它发送了ID,就让开,或者别的什么。谢谢。

4

2 回答 2

1

成功部分是在 Ajax 成功完成时调用的函数。它将有许多东西作为参数通过 jQuery 传入,包括响应。

函数的定义是...

Function( PlainObject data, String textStatus, jqXHR jqXHR )

所以你会做...

$.ajax({
    ...
    success: function(data, textStatus, jqXHR) {
        $("#SomeResultDiv").html(data); //Put the response in the div with Id "SomeResultDiv"
    }
});

data对象包含作为字符串的响应。

textStatus是不言自明的。请求的 Http 状态的文本描述。

jqXHR是 jQuery XmlHttpRequest 对象 - 它是每个浏览器中使用的 XmlHttpRequests 的包装器。它提供了诸如标头、http 响应代码等信息...有关更多信息,请参阅文档。

如果您不想这样,可以从列表末尾省略参数

    success: function(data) {...}

是完全有效的。

请注意,您可以使用$.json()而不是$.ajax()调用返回 Json 对象的 Web 方法。当您的服务器不知道格式化时,这些非常方便。例如,您有一个服务器,它只将统计数据报告为 JSON 对象。您的 Javascript 可以加载该数据,然后根据需要创建 divs/graphs/etc。为您提供漂亮干净的服务器端代码、关注点分离(数据与格式)以及许多其他优点。

于 2013-03-05T00:08:28.537 回答
0

下面是一个使用 webmethod 的简单邮件发送代码示例

[System.Web.Services.WebMethod]
public static int SendMail(string Name, string FromEmail, string Body)
{
    StringBuilder sbBody = new StringBuilder();
    string ToEmail = "goldramesh.cool@gmail.com";
    sbBody.Append(Name + ",");
    sbBody.Append("<br/>");
    sbBody.Append("<br/>");
    sbBody.Append(Body);
    Contact contact = new Contact();
    //string script = "alert('Message sent successfully');window.location ='Contact.aspx';";
    System.Net.Mail.MailMessage eMail = new System.Net.Mail.MailMessage();
    eMail.From = new System.Net.Mail.MailAddress(FromEmail);
    eMail.To.Add(ToEmail);
    eMail.Subject = "Contact from  " + FromEmail;
    eMail.IsBodyHtml = true;
    eMail.Body = Body;
    SmtpClient SMTP = new SmtpClient();
    SMTP.Send(eMail);
    eMail.Dispose();
    contact.Clear();
    return 1;
}

Ajax 编码是

var pageUrl = 'Contact.aspx';
        $.ajax({
            url: pageUrl + '/SendMail',
            type: "POST",
            data: '{Name: "' + Name + '",FromEmail: "' + FromEmail + '",Body: "' + Body + '"}',
            dataType: "json",
            contentType: "application/json",
            **success: function (data) {// Success 
                if (data.d == 1) {//Check success code** 
                    $("input[type=button]").val("Send Mail");
                    alert("Mail successfully sent");                     
                }
            }
        });  

我的网络方法是返回 1。所以我检查了 data.d==1

你可以看到我的示例方式......

于 2013-03-05T18:04:43.120 回答