AmbiguousActionException: совпадение нескольких действий. Следующие действия соответствовали данным маршрута и удовлетворяли всем ограничениям:

Я знаю, что было больше вопросов по этому поводу, но они, похоже, не работают для меня.

Я следовал следующему руководству: 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; }
}
}

У вас есть определение метода public IActionResult Index с тем же методом HTTP (GET), что вызывает неоднозначное сопоставление. Либо замените одно из названий вашего метода действий, либо используйте вместо него атрибут [HttpPost].

Tetsuya Yamamoto 12.03.2019 10:55

Как бы я тогда использовал этот метод?

MAN8zzzzzzzzzDWOMAN 12.03.2019 10:59

Сделайте так, чтобы второй метод действия использовал метод HTTP POST, как указано в ответе ниже.

Tetsuya Yamamoto 12.03.2019 11:05

Ах, я вижу, это сработало, но теперь он говорит, что MailMessage mm = new MailMessage(from, gmail.To); не может быть нулевым

MAN8zzzzzzzzzDWOMAN 12.03.2019 11:17
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
4
950
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема, упомянутая в сообщении об исключении, проста: у вас есть 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); не может быть нулевым

MAN8zzzzzzzzzDWOMAN 12.03.2019 11:19

Другие вопросы по теме