Как перенаправить на HTML-страницу из контроллера? - PullRequest
0 голосов
/ 13 июня 2019

Пользователи получают электронное письмо со ссылкой, по которой они должны щелкнуть, чтобы подтвердить свой адрес электронной почты. После того, как ссылка нажата, пользователь должен быть перенаправлен на одну из двух статических HTML-страниц, одна из которых гласит «Вы сертифицированы», а другая - «Срок действия ссылки истек»

Я попробовал несколько вариантов. Сначала я добавил Response.Redirect на мой контроллер с путем к представлению. Я также попробовал, где я добавил маршруты. MapPageRoute в мой файл RouteConfig и изменил мой вызов перенаправления, чтобы попытаться использовать это имя, но это тоже не работает. Я посмотрел этот пример для этого исправления ( Перенаправление на html-страницу в папке просмотра )

Вот мой код, пытающийся получить доступ к HTML-файлу с помощью перенаправления:

EmailCertification.UpdateDBEmailCertified(userName, int.Parse(memberNumber), certSentDT);

return Redirect("~/Views/EmailCertification/EmailCertified.html");`

Я получаю сообщение об ошибке:

Путь к /Views/EmailEmailCertification/EmailCertified.html не найден. Я проверил орфографию и путь все верный.

Если я изменил свой код для включения MapPageRoute в RoutesConfig, он все равно не будет работать.

Вот мой конфиг маршрута:

routes.MapPageRoute("HtmlPage", "EmailCertifiedURL", "~/Views/EmailCertification/EmailCertied.html");`

Вот мой контроллер:

return Redirect("EmailCertifiedURL");

Вот мой контроллер в действии, это HttpPost

public ActionResult EmailCertify(string userName, string memberNumber, string certSentDate)
        {
            DateTime certSentDT;

            long lngCertSent = long.Parse(certSentDate);

            certSentDT = new DateTime(lngCertSent);

            if (certSentDT < DateTime.Now.AddDays(-14))
                return Redirect("EmailOldURL");

            EmailCertification.UpdateDBEmailCertified(userName, int.Parse(memberNumber), certSentDT);
            return Redirect("~/Views/EmailCertification/EmailCertified.html");
        }

Ошибка, которую я получаю, заключается в том, что

у контроллера нет действия EmailCertifiedURL. Этот код я взял из вышеупомянутой статьи StackFlow.

Все, что мне нужно, это ссылка на электронную почту, чтобы запустить действие контроллера EmailCertify и перенаправить меня на статическую HTML-страницу.

https://localhost:44344/EmailCertification/EmailCertify?userName=IS&memberNumber=3000050&certSentDate=636959314302036120 

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Это кажется странным. Обходным путем может быть добавление нового действия, которое возвращает весь ваш HTML без макета. Я имею в виду, попробуйте с этим

public ActionResult CertifiedEmail(){ 
    return View(); 
} 

Затем вы должны создать представление для своего действия с тем же именем (CertifiedEmail.cshtml), а внутри своего представления вставить весь свой HTML. В начале вы должны добавить этот код, чтобы удалить макет

@{ 
    Layout = null; 
}
0 голосов
/ 13 июня 2019

Я склонен использовать методы RedirectToAction () вместо просто Redirect ()

Вторым параметром должно быть имя контроллера, если это другой контроллер.

return RedirectToAction("EmailCertifiedURL", "EmailCertification");

...