Кнопка отправки MVC ничего не делает

Это мой первый проект ASP MVC — это простой опрос, который я начинаю с пары вопросов. Однако моя кнопка отправки на странице «Создать» не работает, и я не знаю, почему...

После создания нового проекта MVC я создал модель «Опрос», которая содержит SurveyID и 2 свойства (для хранения ответов на 2 вопроса опроса). Затем я создал новый контроллер Scaffolded с представлениями на основе этой модели опроса. Все, что мне нужно, это создать, поэтому я удалил все материалы для сведений, редактирования и т. д. Я попытался настроить свои представления так, чтобы в разделе «Главная» был указатель, который является начальной страницей, которую вы видите, и «Конец обзора», который предполагается быть тем, что вы видите после отправки ответов на опрос. В Index вы нажимаете кнопку «Далее», которая ведет на страницу создания опроса. Вы отвечаете на вопросы, а затем нажимаете кнопку «Готово», после чего вы отправляетесь в EndOfSurvey. Кнопка «Готово» в «Создать» ничего не делает — я попытался поставить точку останова в первой строке «Создать сообщение», и она даже не дошла до этой точки останова. Ниже мой код с несколькими вещами, которые я пробовал.

Обратите внимание, что я понимаю, что мне, вероятно, нужно что-то сделать, чтобы указать, какое значение должно иметь каждое свойство на основе выбранного переключателя. Это отдельный вопрос. Но я полагаю, что если кнопка отправки работает, она должна, по крайней мере, запускать «Создать», верно??

Исходное представление создания:

 @ModelType ProSurvey.ProSurvey.Models.Survey
 @Code
     ViewData("Title") = "Create"
     Layout = "~/Views/Shared/_Layout.vbhtml"
 End Code

 <h2>Managing and Downloading from Devices</h2>

 @Using (Html.BeginForm())
     @Html.AntiForgeryToken()

     @<div class="form-horizontal">
         <h4>How often do you use the following features:</h4>
         @*<hr />*@
         @Html.ValidationSummary(True, "", New With { .class = "text-danger" })
         <div class="form-group">
             <table class="table">
                 <thead>
                     <tr>
                         <th></th>
                         <th>Never</th>
                         <th>Rarely</th>
                         <th>Sometimes</th>
                         <th>Usually</th>
                         <th>Always</th>
                     </tr>
                 </thead>
                 <tbody>
                     <tr>
                         <td>@Html.DisplayNameFor(Function(model) model.mddbccu)</td>
                         <td>
                             <div class="radio">
                                 <input name="mddbcuu" id="mddbcuu0" value="Never" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                 <input name="mddbcuu" id="mddbcuu1" value="Rarely" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                  <input name="mddbcuu" id="mddbcuu2" value="Sometimes" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                 <input name="mddbcuu" id="mddbcuu3" value="Usually" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                 <input name="mddbcuu" id="mddbcuu4" value="Always" checked="" type="radio">
                             </div>
                         </td>
                     </tr>
                     <tr>
                         <td>@Html.DisplayNameFor(Function(model) model.mddtfuu)</td>
                         <td>
                             <div class="radio">
                                 <input name="mddtfuu" id="mddtfuu0" value="Never" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                 <input name="mddtfuu" id="mddtfuu1" value="Rarely" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                 <input name="mddtfuu" id="mddtfuu2" value="Sometimes" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                 <input name="mddtfuu" id="mddtfuu3" value="Usually" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                  <input name="mddtfuu" id="mddtfuu4" value="Always" checked="" type="radio">
                             </div>
                         </td>
                     </tr>
                 </tbody>
             </table>
         </div>
     </div>

 End Using

 <div class="row">
     <div class="col-md-4" style="align-content:center">
         <button class="btn btn-default">Back</button>
     </div>
     <div class="col-md-4" style="align-content:center">
         <p>Progress: []</p>
     </div>
     <div class="col-md-4" style="align-content:center">
         <input type="submit" value="Done" class="btn btn-default">
     </div>
 </div>

 @Section Scripts 
     @Scripts.Render("~/bundles/jqueryval")
 End Section

Оригинальный контроллер опроса:

 Imports System
 Imports System.Collections.Generic
 Imports System.Data
 Imports System.Data.Entity
 Imports System.Linq
 Imports System.Threading.Tasks
 Imports System.Net
 Imports System.Web
 Imports System.Web.Mvc
 Imports ProSurvey.Models
 Imports ProSurvey.ProSurvey.Models

 Namespace Controllers
     Public Class SurveyController
         Inherits System.Web.Mvc.Controller

         Private db As New ProSurveyContext

         ' GET: Survey
         Async Function Index() As Task(Of ActionResult)
             Return View(Await db.Surveys.ToListAsync())
         End Function

         Public Sub New()
         End Sub

         ' GET: Survey/Create
         Function Create() As ActionResult
             Return View()
         End Function

         ' POST: Survey/Create
         'To protect from overposting attacks, please enable the specific properties you want to bind to, for 
         'more details see http://go.microsoft.com/fwlink/?LinkId=317598.
         <HttpPost()>
         <ValidateAntiForgeryToken()>
         Async Function Create(<Bind(Include:="SurveyID,mddbccu,mddtfuu")> ByVal survey As Survey) As Task(Of ActionResult)
             If ModelState.IsValid Then
                 db.Surveys.Add(survey)
                 Await db.SaveChangesAsync()
                 Return RedirectToAction("EndOfSurvey")
             End If
             Return View(survey)
         End Function

         Protected Overrides Sub Dispose(ByVal disposing As Boolean)
             If (disposing) Then
                 db.Dispose()
             End If
             MyBase.Dispose(disposing)
         End Sub
     End Class
 End Namespace

Основываясь на паре других вопросов SO, которые я нашел, я попытался:

Изменение @Using (Html.BeginForm()) на @Using (Html.BeginForm("Создать", "Опрос", FormMethod.Post))

Комментирование раздела Scripts в представлении

Также комментирую «If ModelState.IsValid..» и ставлю точку останова на db.Surveys.Add(опрос). Это все еще не дошло до моей точки останова.

Не знаю, что еще попробовать на данный момент. Есть идеи? Большое спасибо!

Модель опроса:

 Imports System.ComponentModel

 Namespace ProSurvey.Models

     Public Class Survey

         Private surveyIDInt As Integer           'Survey ID
         Private mddbccuStr As String
         Private mddtfuuStr As String

         Public Property SurveyID() As Integer
             Get
                 Return surveyIDInt
             End Get
             Set(ByVal value As Integer)
                 surveyIDInt = value
             End Set
         End Property

         Public Property mddbccu() As String
             Get
                 Return mddbccuStr
             End Get
             Set(ByVal value As String)
                 mddbccuStr = value
             End Set
         End Property

         Public Property mddtfuu() As String
             Get
                 Return mddtfuuStr
             End Get
             Set(ByVal value As String)
                 mddtfuuStr = value
             End Set
         End Property

     End Class

 End Namespace

person Andy    schedule 26.05.2015    source источник
comment
Вы делаете MVC в VB? Это просто грустно.   -  person thomasb    schedule 26.05.2015


Ответы (1)


Кнопка отправки должна быть внутри @Using формы:

@ModelType ProSurvey.ProSurvey.Models.Survey
 @Code
     ViewData("Title") = "Create"
     Layout = "~/Views/Shared/_Layout.vbhtml"
 End Code

 <h2>Managing and Downloading from Devices</h2>

 @Using (Html.BeginForm())
     @Html.AntiForgeryToken()

     @<div class="form-horizontal">
         <h4>How often do you use the following features:</h4>
         @*<hr />*@
         @Html.ValidationSummary(True, "", New With { .class = "text-danger" })
         <div class="form-group">
             <table class="table">
                 <thead>
                     <tr>
                         <th></th>
                         <th>Never</th>
                         <th>Rarely</th>
                         <th>Sometimes</th>
                         <th>Usually</th>
                         <th>Always</th>
                     </tr>
                 </thead>
                 <tbody>
                     <tr>
                         <td>@Html.DisplayNameFor(Function(model) model.mddbccu)</td>
                         <td>
                             <div class="radio">
                                 <input name="mddbcuu" id="mddbcuu0" value="Never" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                 <input name="mddbcuu" id="mddbcuu1" value="Rarely" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                  <input name="mddbcuu" id="mddbcuu2" value="Sometimes" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                 <input name="mddbcuu" id="mddbcuu3" value="Usually" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                 <input name="mddbcuu" id="mddbcuu4" value="Always" checked="" type="radio">
                             </div>
                         </td>
                     </tr>
                     <tr>
                         <td>@Html.DisplayNameFor(Function(model) model.mddtfuu)</td>
                         <td>
                             <div class="radio">
                                 <input name="mddtfuu" id="mddtfuu0" value="Never" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                 <input name="mddtfuu" id="mddtfuu1" value="Rarely" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                 <input name="mddtfuu" id="mddtfuu2" value="Sometimes" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                 <input name="mddtfuu" id="mddtfuu3" value="Usually" checked="" type="radio">
                             </div>
                         </td>
                         <td>
                             <div class="radio">
                                  <input name="mddtfuu" id="mddtfuu4" value="Always" checked="" type="radio">
                             </div>
                         </td>
                     </tr>
                 </tbody>
             </table>
         </div>
     </div>



 <div class="row">
     <div class="col-md-4" style="align-content:center">
         <button class="btn btn-default">Back</button>
     </div>
     <div class="col-md-4" style="align-content:center">
         <p>Progress: []</p>
     </div>
     <div class="col-md-4" style="align-content:center">
         <input type="submit" value="Done" class="btn btn-default">
     </div>
 </div>
End Using

 @Section Scripts 
     @Scripts.Render("~/bundles/jqueryval")
 End Section
person Ala    schedule 26.05.2015
comment
ха-ха... дуууууу. Спасибо!! Это сработало. Хотя, конечно, теперь это дает мне ошибку, когда я нажимаю «Готово», что «Опрос» не имеет определенного ключа. Думаю, я должен проверить это сейчас.... - person Andy; 26.05.2015
comment
Я исправил ошибку, из-за которой для «Опроса» не был определен ключ. Теперь кнопка «Готово» работает, и я попадаю на страницу EndOfSurvey, и они помещаются в мою БД. Проблема, с которой я столкнулся сейчас, заключается в том, что значение для первого вопроса не регистрируется - регистрируется только последний вопрос. Так, например, я отправлю Никогда и Редко в таком порядке - эта строка в БД содержит NULL и Редко. Есть идеи, почему? Спасибо! - person Andy; 26.05.2015
comment
Я добавил свой класс Survey в конец своего вопроса. Все свойства в нем одинаковые (кроме имени). Как и ожидалось, SurveyID увеличивается с каждой новой отправкой. - person Andy; 26.05.2015
comment
У вас есть слово miis (mddbccu) в представлении создания: ‹td›@Html.DisplayNameFor(Function(model) model.mddbccu)‹/td› ‹td› ‹div class=radio› ‹input name=mddbccu id=mddbcuu0 value =Никогда не проверялось= type=radio› ‹/div› ‹/td› - person Ala; 26.05.2015
comment
Я сам себе фейспалм! Вот почему хорошо иметь другой взгляд на вещи. :P Большое спасибо! @Ала - person Andy; 26.05.2015