Я знаю, что было больше вопросов по этому поводу, но они, похоже, не работают для меня.
Я следовал следующему руководству: https://thewikihow.com/video_hlZexx2gbNs.
Я хочу создать форму отправки электронной почты в MVC ASP.NET. Все, казалось, работало, кроме последнего шага. Мне пришлось изменить RouteConfig, но у меня нет routeconfig.
Я думаю, что мне нужно изменить это, чтобы это работало, но я не знаю, где это изменить. Кто-нибудь знает, как решить эту проблему?
Если есть хорошее решение для этого по другому вопросу, дайте мне знать.
Это код, который я использую для представления:
@model smoothboard.Models.gmail
@{
ViewData["Title"] = "Index";
}
<h2>Index</h2>
<h4>Email</h4>
<hr />
<div>
@using (Html.BeginForm("Index", "EmailSetup", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<table>
<tr>
<td>
Naar:
</td>
<td>
@Html.TextBoxFor(gmail=>gmail.To)
</td>
</tr>
<tr>
<td>
<input type = "submit" value = "Verzend">
</td>
</tr>
</table>
}
</div>
<div>
<a asp-action = "Index">Back to List</a>
</div>
Это код, который я использую для отправки почты:
public class EmailSetupController : Controller
{
public IActionResult Index()
{
return View();
}
string from = new string("[email protected]");
string subject = new string("Geregistreerd");
string body = new string("Je hebt je ingeschreven voor de nieuwsbrief!");
public IActionResult Index(smoothboard.Models.gmail gmail, string from)
{
MailMessage mm = new MailMessage(from, gmail.To);
mm.Subject = subject;
mm.Body = body;
mm.IsBodyHtml = false;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.EnableSsl = true;
NetworkCredential nc = new NetworkCredential("[email protected]", "hans1234hans");
smtp.UseDefaultCredentials = true;
smtp.Credentials = nc;
smtp.Send(mm);
ViewBag.MailMessage = "Mail is verzonden";
return View();
}
}
Это то, что я использую для своей модели:
namespace smoothboard.Models
{
public class gmail
{
public string To { get; set; }
}
}
Как бы я тогда использовал этот метод?
Сделайте так, чтобы второй метод действия использовал метод HTTP POST, как указано в ответе ниже.
Ах, я вижу, это сработало, но теперь он говорит, что MailMessage mm = new MailMessage(from, gmail.To); не может быть нулевым






Проблема, упомянутая в сообщении об исключении, проста: у вас есть 2 метода действия с одинаковым именем и одним и тем же HTTP-методом (по умолчанию HTTP-методом является GET, который неявно использует [HttpGet]):
// first action with GET method
public IActionResult Index() { ... }
// ambiguous matching here because this also uses GET method
public IActionResult Index(smoothboard.Models.gmail gmail, string from) { ... }
Поскольку у вас есть помощник BeginForm, который использует FormMethod.Post:
@using (Html.BeginForm("Index", "EmailSetup", FormMethod.Post, new { enctype = "multipart/form-data" }))
Затем вы должны украсить второе действие Index параметрами, используя атрибут [HttpPost], чтобы отличить его HTTP-метод:
[HttpPost]
public IActionResult Index(smoothboard.Models.gmail gmail, string from)
{
MailMessage mm = new MailMessage(from, gmail.To);
mm.Subject = subject;
mm.Body = body;
mm.IsBodyHtml = false;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.EnableSsl = true;
NetworkCredential nc = new NetworkCredential("[email protected]", "hans1234hans");
smtp.UseDefaultCredentials = true;
smtp.Credentials = nc;
smtp.Send(mm);
ViewBag.MailMessage = "Mail is verzonden";
return View();
}
спасибо, но теперь он говорит, что MailMessage mm = new MailMessage(from, gmail.To); не может быть нулевым
У вас есть определение метода
public IActionResult Indexс тем же методом HTTP (GET), что вызывает неоднозначное сопоставление. Либо замените одно из названий вашего метода действий, либо используйте вместо него атрибут[HttpPost].