【问题标题】:MVC5 binding action to buttonMVC5 绑定动作到按钮
【发布时间】:2014-01-27 20:25:57
【问题描述】:

我在将按钮绑定到操作时遇到问题。我创建了一个表单,当用户单击“发送”按钮时,它需要触发一些操作。

下面你可以看到我的cshtml代码:

@model Project.Models.MailMessage    
<form name="contactForm" method="post" action="" class="form-horizontal" role="form">
                <div class="col-lg-8">
                    <div id="Contact" class="jumbotron contact-form">
                        <div class="panel-heading">
                            <h1 class="panel-title">Kontakt</h1>
                        </div>
                        <div class="input-group">
                            <span class="input-group-addon">Imie</span>
                            @Html.TextBoxFor(model => model.Name, new { @class = "form-control" ,placeholder ="Twoje imię"})
                            <!--<input type="text" class="form-control" placeholder="Imie" id="inputName" required="required">-->
                        </div>

                        <div class="input-group">
                            <span class="input-group-addon">Nazwisko</span>
                            @Html.TextBoxFor(model => model.Surname, new { @class = "form-control", placeholder = "Twoje nazwisko" })
                            <!--<input type="text" class="form-control" placeholder="Nazwisko" id="inputSurname" required="required">-->
                        </div>

                        <div class="input-group">
                            <span class="input-group-addon">Email</span>
                            @Html.TextBoxFor(model => model.EmailAdress, new { @class = "form-control", placeholder = "Adres email" })
                            <!--<input type="email" class="form-control" placeholder="Email" id="inputEmail" required="required">-->

                        </div>
                        <div class="input-group">
                            <span class="input-group-addon">Treść<br /> wiadomości</span>
                            @Html.TextAreaFor(model => model.Name, new { @class = "form-control", placeholder = "Treść wiadomości", id = "inputMessage", name = "inputMessage", rows="4" })
                            <!--<textarea class="form-control" rows="4" id="inputMessage" name="inputMessage" placeholder="Treść wiadomości..." required="required"></textarea>-->
                        </div>
                        <div class="form-group">
                            <div class="col-lg-offset-2 col-lg-1">
                                <button type="submit" class="btn btn-default">
                                    Send Message
                                </button>
                            </div>
                        </div>
                    </div>
                </div>
            </form>

这是我的控制器:

public class HomeController : Controller
    {
        //
        // GET: /Home/
        public ActionResult Index()
        {
            return View();
        }
        // GETL /Search/
        public ActionResult Search()
        {
            return View();
        }
        public ActionResult Contact()
        {
            return View();
        }
        public ActionResult SendMail(MailMessage m)
        {

            return RedirectToAction("Contact");
        }
    }

我设法完成了所有这些事情。所有代码都有效。但坚持我认为很容易成为工作的一部分。从 Controller 调用 SendMail(MailMessage m) 的绑定按钮。

谁能建议我如何做到这一点?

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    在内部使用Html.BeginForm 助手和&lt;input type="submit" value="..." /&gt;。请参阅示例here。在可能的情况下,首选基础设施助手而不是自己的 HTML 代码。您可能不使用 Antiforgery 机制来防止 CSRF 攻击。建议在帖子表单中使用,如the example 中所述。

    【讨论】:

    • 感谢您的建议。开始表单破坏了我的代码对齐方式。大量的 html 代码在一个流中呈现而不会断行。
    【解决方案2】:

    你必须声明表单的action

    <form ... action="@Url.Action("SendMail","Home")" ...>
    

    【讨论】:

      【解决方案3】:

      试试这个:

      SendMail.cshtml

           @model Project.Models.MailMessage    
           <form name="contactForm" method="post" action="" class="form-horizontal" role="form">
                  <div class="col-lg-8">
                      <div id="Contact" class="jumbotron contact-form">
                          <div class="panel-heading">
                              <h1 class="panel-title">Kontakt</h1>
                          </div>
                          <div class="input-group">
                              <span class="input-group-addon">Imie</span>
                              @Html.TextBoxFor(model => model.Name, new { @class = "form-control" ,placeholder ="Twoje imię"})
                              <!--<input type="text" class="form-control" placeholder="Imie" id="inputName" required="required">-->
                          </div>
      
                          <div class="input-group">
                              <span class="input-group-addon">Nazwisko</span>
                              @Html.TextBoxFor(model => model.Surname, new { @class = "form-control", placeholder = "Twoje nazwisko" })
                              <!--<input type="text" class="form-control" placeholder="Nazwisko" id="inputSurname" required="required">-->
                          </div>
      
                          <div class="input-group">
                              <span class="input-group-addon">Email</span>
                              @Html.TextBoxFor(model => model.EmailAdress, new { @class = "form-control", placeholder = "Adres email" })
                              <!--<input type="email" class="form-control" placeholder="Email" id="inputEmail" required="required">-->
      
                          </div>
                          <div class="input-group">
                              <span class="input-group-addon">Treść<br /> wiadomości</span>
                              @Html.TextAreaFor(model => model.Name, new { @class = "form-control", placeholder = "Treść wiadomości", id = "inputMessage", name = "inputMessage", rows="4" })
                              <!--<textarea class="form-control" rows="4" id="inputMessage" name="inputMessage" placeholder="Treść wiadomości..." required="required"></textarea>-->
                          </div>
                          <div class="form-group">
                              <div class="col-lg-offset-2 col-lg-1">
                                  <button type="submit" class="btn btn-default">
                                      Send Message
                                  </button>
                              </div>
                          </div>
                      </div>
                  </div>
              </form>
      

      给你控制器

      public class HomeController : Controller
      {
          //
          // GET: /Home/
          public ActionResult Index()
          {
              return View();
          }
          // GETL /Search/
          public ActionResult Search()
          {
              return View();
          }
          public ActionResult Contact()
          {
              return View();
          }
          [HttpGet]
          public ActionResult SendMail(MailMessage m)
          {
            return View();
          }
          [HttpPost]
          public ActionResult SendMail(MailMessage m)
          {
              return RedirectToAction("Contact");
          }
      }
      

      当您单击按钮时,它会在您的控制器中调用 [HttpPost] 方法。不得不提[HttpPost]

      【讨论】:

      • 当表单动作看起来像action="" 那么表单如何发布到控制器和动作方法?
      【解决方案4】:

      改变你的方法

      [HttpPost]
       public ActionResult SendMail(MailMessage m)
              {
      
                  return RedirectToAction("Contact");
              }
      

      【讨论】:

        猜你喜欢
        • 2020-12-29
        • 1970-01-01
        • 2017-07-30
        • 2015-07-05
        • 2012-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多