Я создаю форму электронной почты MVC, и все, что есть на странице учебника, за исключением случаев, когда я сохраняю [HttpPost] разрыв страницы.
Я не думаю, что я отказываюсь от Импорта.
Что исправит это, так что форма электронной почты будет опубликована или, скорее, [HttpPost]
не вызовет ошибку? Я также попробовал [System.Web.Mvc.HttpPost]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Net.Mail;
using System.Text;
using SW.Models;
namespace SW.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
//ViewBag.Message = "Your application description page.";
return View();
}
//[System.Web.Mvc.HttpPost]
public ActionResult Contact(ContactModels c)
{
//ViewBag.Message = "Your contact page.";
if (ModelState.IsValid)
{
try
{
MailMessage msg = new MailMessage();
SmtpClient smtp = new SmtpClient();
MailAddress from = new MailAddress(c.Email.ToString());
StringBuilder sb = new StringBuilder();
msg.To.Add("[email protected]");
msg.Subject = "Contact Us";
msg.IsBodyHtml = false;
smtp.Host = "mail.mail.com";
smtp.Port = 25;
sb.Append("First name: " + c.FirstName);
sb.Append(Environment.NewLine);
sb.Append("Last name: " + c.LastName);
sb.Append(Environment.NewLine);
sb.Append("Email: " + c.Email);
sb.Append(Environment.NewLine);
sb.Append("Comments: " + c.Comment);
smtp.Send(msg);
msg.Dispose();
return View("Success");
}
catch (Exception)
{
return View("Error");
}
}
return View();
}
}
}
Как скоро, когда я получаю контакт, я получаю сообщение об ошибке:
Ошибка сервера в приложении '/'
Ресурс не может быть найден.
Описание: HTTP 404. Ресурс, который вы ищете (или его зависимости), мог быть удален, изменилось его имя или временно недоступно. Просмотрите следующий URL-адрес и убедитесь, что оно написано правильно.
Запрошенный URL:/Главная/Контакт
Информация о версии: Microsoft.NET Framework Версия: 4.0.30319; Версия ASP.NET: 4.0.30319.18446
Трудно сказать точно, не зная, какое сообщение об ошибке вы получаете, но я думаю, что это проблема: вы захотите иметь отдельные методы GET и POST для действия Contact(). GET обрабатывает случай, когда вы просматриваете страницу контакта. POST обрабатывает случай, когда вы отправляете свою форму.
Это может выглядеть примерно так:
[System.Web.Mvc.HttpGet]
public ActionResult Contact()
{
return View(new ContactModels());
}
[System.Web.Mvc.HttpPost]
public ActionResult Contact(ContactModels c)
{
//ViewBag.Message = "Your contact page.";
if (ModelState.IsValid)
{
try
{
MailMessage msg = new MailMessage();
SmtpClient smtp = new SmtpClient();
MailAddress from = new MailAddress(c.Email.ToString());
StringBuilder sb = new StringBuilder();
msg.To.Add("[email protected]");
msg.Subject = "Contact Us";
msg.IsBodyHtml = false;
smtp.Host = "mail.mail.com";
smtp.Port = 25;
sb.Append("First name: " + c.FirstName);
sb.Append(Environment.NewLine);
sb.Append("Last name: " + c.LastName);
sb.Append(Environment.NewLine);
sb.Append("Email: " + c.Email);
sb.Append(Environment.NewLine);
sb.Append("Comments: " + c.Comment);
smtp.Send(msg);
msg.Dispose();
return View("Success");
}
catch (Exception)
{
return View("Error");
}
}
return View();
}
Если у вас есть только один метод с атрибутом HttpPost, он доступен только для HTTP-запросов POST, поэтому попытка HTTP GET страницы в вашем веб-браузере завершится с ошибкой.
Действия без атрибутов - это методы GET по умолчанию. Если вы добавите явный атрибут HttpPost
к вашему методу, он больше не будет работать для запросов GET, таких как отображение страницы контактов в первую очередь.
Вы можете использовать синтаксис атрибута [AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
чтобы разрешить оба.
У вас должны быть как действия Get, так и Post, или удалить атрибут HttpPost и назначить ваш метод формы "GET".
POST
и сGET
? Т.е. если вы добавите пост-аннотацию, получение страницы контакта больше не работает?