Это мой первый проект 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