使用HttpPost注释?修复,所以它不会打破页面
本文关键字:注释 HttpPost 修复 使用 | 更新日期: 2023-09-27 18:19:20
我正在构建一个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("mail@hotmail.com");
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();
}
}
}
一切换到Contact,就出现了错误:
'/'应用程序出现服务器错误。
无法找到资源。
描述:HTTP 404。您正在查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下网址,并确保拼写正确。
请求的URL:/Home/Contact
版本信息:Microsoft .NET Framework Version:4.0.30319;ASP。净版:4.0.30319.18446
在不知道得到什么错误消息的情况下很难确定,但我认为这就是问题所在:您希望为Contact()操作使用单独的GET和POST方法。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("mail@hotmail.com");
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请求,所以在你的web浏览器中尝试HTTP GET页面将失败。
不带属性的操作是默认的GET方法。如果您将显式的HttpPost
属性添加到您的方法中,它将不再为GET请求工作,例如首先显示联系人页面。
您可以使用[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
属性语法来允许两者。
您必须同时拥有Get和Post操作或删除HttpPost属性并将表单方法分配给" Get "