使用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

使用HttpPost注释?修复,所以它不会打破页面

在不知道得到什么错误消息的情况下很难确定,但我认为这就是问题所在:您希望为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 "