2016-06-27 4 views
1

Я создал простое приложение MVC. Он имеет вид Index в папке home, в представлении у меня есть некоторые поля ввода, какие входы я хочу сохранить как объект и сохранить в базе данных. Я создал представление с контроллера, который я создал. Моя проблема, когда я нажимаю кнопку для отправки ничего, похоже, не происходит?

Вот код, который я имею в представлении.Вход от приложения mvc не отправляется в базу данных

@model FlexMVC.FlexBookingDb.Resevation 

@{ 
    ViewBag.Title = "Create"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Create</h2> 

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     <h4>Resevation</h4> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.ResevationDate, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.ResevationDate, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.ResevationDate, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.ResevationTime, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.ResevationTime, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.ResevationTime, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.Car, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Car, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Car, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.Customer, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Customer, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Customer, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.StartLocation, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.StartLocation, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.StartLocation, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.EndLocation, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.EndLocation, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.EndLocation, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Create" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

И вот мой код контроллера.

namespace FlexMVC.Controllers 
{ 
    public class ResevationController : Controller 
    { 
     // GET: Resevation 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     // POST: Resevation 
     [HttpPost] 
     public ActionResult Create(Resevation resevation) 
     { 
      ResevationModels model = new ResevationModels(); 

      resevation.Car = 1; 
      resevation.Customer = 1; 

      model.CreateResevation(resevation); 

      return View(model); 
     } 

    } 
} 

Может кто-нибудь объяснить мне, что я делаю неправильно? и, пожалуйста, скажите, должен ли я также опубликовать код модели.

Редактировать:
Вот код метода CreateResevation.

public void CreateResevation(Resevation resevation) 
    { 
     resevation.Car = FindAvaliableCar(resevation.ResevationDate, resevation.ResevationTime); 

     _db.Resevations.InsertOnSubmit(resevation); 
     _db.SubmitChanges(); 
    } 
+0

Какое действие возвращает представление вы показываете нам? Какое действие вызывается формой submit? Сама форма не указывает, какой вид использовать. Если 'Index' возвращает форму, то вы можете отправить обратно в« Index », который ничего не делает. – David

+0

@David Я новичок в MVC, поэтому я не уверен в этом. Но я хочу, чтобы действие Create было запущено, когда нажала кнопка отправки, которую я нажал. и i dosent действительно имеет значение, с которым я вернусь после нажатия кнопки. Я просто хочу вставить данные на данный момент? если это имеет смысл. –

+0

Вы можете указать, какое действие вызывать при вызове 'Html.BeginForm()'. https://msdn.microsoft.com/en-us/library/system.web.mvc.html.formextensions.beginform.aspx – David

ответ

2

У вас есть 2 проблемы.

  1. Возможно, вы представили неправильное действие. Вы отправляете в Индекс, хотя вы, вероятно, хотели представить Создать. Это может быть исправлено путем изменения в @using (Html.BeginForm("Create", "ControllerNameHere"))

  2. AntiForgeryToken необходим атрибут в [ValidateAntiForgeryToken()] проверки по предложенным действиям.

Изменить его

[HttpPost] 
[ValidateAntiForgeryToken()] 
public ActionResult Create(Resevation resevation) 
+0

FYI: '[ValidateAntiForgeryToken]' не требуется. Единственный способ, который потребовался бы, это то, что контроллер указал его, а представление не было. – webnoob

+0

Спасибо, хороший друг. –

+0

ОрелЭраки Спасибо за ответ. Я немного запутался в этой части MVC. Поэтому мой класс контроллера называется ResevationController, и действие называется create. @using (Html.BeginForm («Создать», «ResevationController»)), это правильный способ записать его? Я получаю сообщение о том, что ресурсы не найдены, когда я пытаюсь это сделать? –

Смежные вопросы