2014-01-09 5 views
1

У меня проблемы с привязкой моей кнопки к действию. Я создал форму, и когда пользователь нажимает кнопку «отправить», ему нужно вызвать какое-то действие.MVC5 привязка к кнопке

Ниже вы можете увидеть мой код 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"); 
     } 
    } 

мне удалось сделать все эти вещи. Весь код работает. Но, застряв, я думаю, что это облегчает работу. Кнопка привязки для вызова SendMail (MailMessage m) из контроллера.

Может ли кто-нибудь предложить мне, как это сделать?

ответ

5

Использование Html.BeginForm помощник и <input type="submit" value="..." /> внутри. См. Пример here. Предпочитайте, если возможно, инфраструктурные помощники по собственному HTML-коду. Вероятно, вы не используете Antiforgery, чтобы предотвратить атаки CSRF. Рекомендуется в почтовых формах, как описано в the example.

+0

Спасибо за предложения НО. Форма начала разрушает выравнивание кода. Массивные части html-кода отображаются в одном потоке, не разбиваясь на строки. – szpic

2

Вы должны объявить форму action.

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

Попробуйте это:

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]

+0

Когда действие формы выглядит как 'action =" "', тогда как форма может быть отправлена ​​на контроллер и метод действий? – Mou

1

просто изменить метод

[HttpPost] 
public ActionResult SendMail(MailMessage m) 
     { 

      return RedirectToAction("Contact"); 
     } 
Смежные вопросы