C# jQuery中未定义的值
我正在尝试向ASP MVC中的登录用户发送电子邮件 为了将值从视图传递到控制器,我通过方法POST使用JQuery 电子邮件的价值总是未定义的问题 视图:C# jQuery中未定义的值,c#,jquery,asp.net-mvc,C#,Jquery,Asp.net Mvc,我正在尝试向ASP MVC中的登录用户发送电子邮件 为了将值从视图传递到控制器,我通过方法POST使用JQuery 电子邮件的价值总是未定义的问题 视图: <tr style="font-style:oblique;font-size:16px; font-family: 'Poppins', sans-serif; font-weight: 600;"> <th> @Html.DisplayNam
<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>
控制器:
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;
}
}
根据您显示的HTML,您没有表单元素可以从中获取此值:
$('#Email').val()
这就是为什么它没有定义。不过,基于对上述问题的广泛评论,您实际上并不需要该表单元素。您希望使用您已经为该用户提供的电子邮件地址,而不是要求用户输入其电子邮件地址
在这种情况下,请完全删除数据元素:
jQuery.ajax({
type: "POST",
url: "/Bestellung/SendMailToUser",
success: function (data) {
alert ("Success")
}
});
并将其从服务器端操作方法签名中删除:
public JsonResult SendMailToUser()
{
//...
}
因为您已经知道用户的电子邮件地址,所以只需在服务器端获取该电子邮件地址。所以问题是
您将登录用户的电子邮件地址存储在哪里
如果是他们的用户名,那么您应该能够从他们的身份直接在控制器中获取它。暂且不考虑严格的依赖关系管理,控制器有一个用户对象可供参考:
var email = User.Identity.Name;
如果不是他们的用户名,或者不是他们身份的一部分,那么它在哪里?它在你的数据库里吗?在这种情况下,您将使用您的用户的唯一标识符still user.Identity.Name来查询您的数据库以获取电子邮件地址,使用您用于查询数据库的任何技术/方法。评论不用于扩展讨论;这段对话已经结束。我解决了它,我把它添加到我的控制器中,它就工作了:连接;不公开;SqlCommand command=new SqlCommandselect来自Bestellung的电子邮件,其中BestellungId=Select MAXBestellungId来自Bestellung,con;字符串em=command.ExecuteScalar.ToString;con.关闭@准确:正如在关于这个问题的评论中提到的,值得在这里为未来的读者提及。。。你的进场是一个等待发生的比赛条件。这不是从数据库获取数据的可靠方法。跟踪实际的标识符,不要仅仅假设最近的记录就是您想要的。是的,我只能对未来的读者说,这个解决方案是可行的,但它不可靠,在某些情况下可能会让我们走错方向。我会尝试找到一个完美的方法,并张贴在这里
var email = User.Identity.Name;