无法调用控制器的HttpPost方法

时间:2019-11-21 06:23:30

标签: html asp.net-mvc

我正在尝试实现以下方案。 创建一个网页,用户可以在评论文本区域中输入他/她的评论,然后单击“提交”按钮,该网页应向客户的电子邮件地址发送一封电子邮件,然后新的视图应加载显示用户建议的消息已发送给客户。

在我的asp.Net MVC应用程序中,我创建了一个控件,并添加了一个名为[SuggestionMessage“的[HttpGet]和[HttpPost]方法。 Get方法加载视图以显示建议的形式。问题是在“提交”按钮上,单击我的httpPost方法未实现!

  [HttpGet]
        public ActionResult SuggestionMessage()
        {
        //this view will load the suggestion form
            return View();
        }

        [HttpPost]
        public ActionResult SuggestionMessage(string content)
        {
        //Code to send email
        //below view will display the message that the user's
        //suggestion have been sent to client.
           return View();
        }

这是我的建议表

@{
    ViewBag.Title = "Suggestions";
}

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Suggestions</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
    <link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>

    <style>
        body {
            font: 20px Montserrat, sans-serif;
            line-height: 1.8;
            color: #000000;
        }

        p {
            font-size: 16px;
        }

        .margin {
            margin-bottom: 25px;
        }

        .margin-1 {
            margin-bottom: 5px;
        }

        .bg-1 {
            background-color: #23F0E4; /* Aqua */
            color: #ffffff;
        }

        .container-fluid {
            padding-top: 70px;
            padding-bottom: 70px;
            padding-left: 0px;
            padding-right: 0px;
        }

    </style>

</head>
<body>
    <div class="container-fluid">
        @using (Html.BeginForm())  
        {
        <form>
            <div class="form-group">
                <label for="comment">Comment:</label>
                <textarea class="form-control" rows="5" id="comment"></textarea>
            </div>
            <div>
                <button  class="btn-primary" id="btnSubmit">Submit</button>
            </div>

        </form>
    }
        </div>
</body>
</html>

1 个答案:

答案 0 :(得分:1)

您的代码指示两种形式,这可能与“提交”按钮弄混了,并且正在提交没有任何操作属性的额外表单标签;

@using (Html.BeginForm())  
{
   <form>
      ...
   </form>
}

别忘了在表单字段中添加名称属性,我注意到textarea中不包含名称属性,使用;

<textarea name="content" class="form-control" rows="5" id="comment"></textarea>

您的按钮也没有type = submit属性,以确保它是用于提交,使用;

<button type="Submit" class="btn-primary" id="btnSubmit">Submit</button>

@Html.BeginForm已经用<form>标签将其内部的元素括起来,并且会自动发布到相同的控制器和动作名称,因此只需使用;

// just remove the extra form tag inside Html.BeginForm()

@using (Html.BeginForm())  
{
  <div class="form-group">
     label for="comment">Comment:</label>
     <textarea name="content" class="form-control" rows="5" id="comment"></textarea>
  </div>
  <div>
     <button type="Submit" class="btn-primary" id="btnSubmit">Submit</button>
  </div>
}