简体   繁体   English

MVC5绑定到按钮的动作

[英]MVC5 binding action to button

I have troubles with binding my button to an action. 我无法将按钮绑定到操作上。 I created a form and when user click "send" button it needs to trigger some action. 我创建了一个表单,当用户单击“发送”按钮时,它需要触发一些操作。

Below you can see my cshtml code: 在下面您可以看到我的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>

Here is my Controller: 这是我的控制器:

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");
        }
    }

I managed to do all this things. 我设法做到了所有这些事情。 All code works. 所有代码均有效。 But stucked with I think easies part tof a job. 但是我坚持认为,容易是工作的一部分。 Binding button to call SendMail(MailMessage m) from Controller. 绑定按钮,用于从Controller调用SendMail(MailMessage m)。

Can anyone suggest me how to do this? 谁能建议我该怎么做?

Use Html.BeginForm helper and <input type="submit" value="..." /> within. 使用Html.BeginForm帮助器并在其中<input type="submit" value="..." /> See an example here . 在这里查看示例。 Prefer infrastructure helpers over own HTML code where possible. 在可能的情况下,优先使用基础结构助手而不是自己的HTML代码。 You probably do not use Antiforgery mechanics to prevent CSRF attacks. 您可能没有使用防伪机制来防止CSRF攻击。 It's recommended in post forms, as described in the example . 示例中所述,建议采用邮寄形式。

您必须声明表单的action

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

Try this: 尝试这个:

SendMail.cshtml 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>

Here you controller 在这里你控制器

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");
    }
}

When you click on button it call [HttpPost] Method in you controller. 当您单击按钮时,它将在控制器中调用[HttpPost]方法。 It is necessary to mention [HttpPost] 有必要提一下[HttpPost]

just change your method 只是改变你的方法

[HttpPost]
 public ActionResult SendMail(MailMessage m)
        {

            return RedirectToAction("Contact");
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM