我正在尝试向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;
}
}
答案 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
)来查询您的数据库以获取电子邮件地址,使用您用于查询数据库的任何技术/方法。