jQuery中未定义的值

时间:2017-10-25 11:48:11

标签: c# jquery asp.net-mvc

我正在尝试向ASP MVC中的已登录用户发送电子邮件。

为了将视图中的值传递给控制器​​,我使用了JQuery方法" POST"。

电子邮件的价值总是" 未定义"

查看:

 <tr style="font-style:oblique;font-size:16px; font-family: 'Poppins', sans-serif; font-weight: 600;">
                <th>
                    @Html.DisplayNameFor(model => model.Email)
                </th>
                <td>
                    @Html.DisplayFor(modelItem => item.Email)
                </td>
  </tr>

<script>
    var SendEmail = function () {
        jQuery.ajax({
            type: "POST",
            url: "/Bestellung/SendMailToUser",
            data: { Email: $('#Email').val() },
            success: function (data) {
                alert ("Success")

            }
        })
    }
</script>

控制器:

public JsonResult SendMailToUser(string Email)
    {
        string em = Convert.ToString(Email);
        bool result = false;
        result = SendEmail(em, "Delivery Email Test", " <p> This a test by Delivery !</p>");
        return Json(result, JsonRequestBehavior.AllowGet);

    }
    public bool SendEmail(string toEmail, string subject, string emailBody)
    {
        try
        {
            string senderEmail = System.Configuration.ConfigurationManager.AppSettings["SenderEmail"].ToString();
            string senderPassword = System.Configuration.ConfigurationManager.AppSettings["SenderPassword"].ToString();

            SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
            client.EnableSsl = true;
            client.Timeout = 100000;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Credentials = new NetworkCredential(senderEmail, senderPassword);
            MailMessage mailMessage = new MailMessage(senderEmail, toEmail, subject, emailBody);

            mailMessage.IsBodyHtml = true;
            mailMessage.BodyEncoding = UTF8Encoding.UTF8;
            client.Send(mailMessage);
            return true;
        }
        catch(Exception ex)
        {
            return false;
        }
    }

1 个答案:

答案 0 :(得分:1)

根据您要显示的HTML,您不会拥有表单元素,从中获取此值:

$('#Email').val()

这就是undefined的原因。但是,基于对上述问题的广泛评论,您实际上并不想该表单元素。您想要使用已经拥有的电子邮件地址,而不是要求用户输入他们的电子邮件地址。

在这种情况下,请完全删除数据元素:

jQuery.ajax({
    type: "POST",
    url: "/Bestellung/SendMailToUser",
    success: function (data) {
        alert ("Success")
    }
});

并从服务器端操作方法签名中删除它:

public JsonResult SendMailToUser()
{
    //...
}

由于您已经知道用户的电子邮件地址,因此您只需要那个电子邮件地址服务器端。所以问题是......

  

您在哪里存储登录用户的电子邮件地址?

如果是他们的用户名,那么您应该可以从他们的身份直接在控制器中获取它。暂时将严格的依赖关系管理放在一边,控制器可以引用User对象:

var email = User.Identity.Name;

如果它不是他们的用户名,或者不是他们身份的一部分,那么它在哪里?它在你的数据库中吗?在这种情况下,您将使用您的用户的唯一标识符(仍为User.Identity.Name)来查询您的数据库以获取电子邮件地址,使用您用于查询数据库的任何技术/方法。