Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# jQuery中未定义的值_C#_Jquery_Asp.net Mvc - Fatal编程技术网

C# 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

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

为了将值从视图传递到控制器,我通过方法POST使用JQuery

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

视图:

 <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;