Хорошо, позвольте мне начать с того, что я новичок в MVC.Учитывая это, я использую версию MVC, поставляемую с Visual Studio 2010. Это также использует Visual Basic, но я уверен, что вы сможете понять это, как только увидите код.
Я пытаюсь проверить свои данные, и процесс проверки работает правильно.Однако, если проверка не проходит, значения, которые были в моем текстовом поле, не перезагружаются в форме.
Моя форма довольно проста, поскольку я хотел начать с чего-то простого для моего первого приложения.Он состоит из таблицы, которая связана с набором объектов Соглашения.Внизу таблицы у меня есть два текстовых поля для добавления нового соглашения.Именно эти два текстовых поля не возвращают данные, отправленные им.
Вот представление:
<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Food.Master" Inherits="System.Web.Mvc.ViewPage(Of IEnumerable (Of NdaToolLibrary.BusinessLayer.Agreement))" %>
<asp:Content ID="Content1" ContentPlaceHolderID="PrimaryContent" runat="server">
<h1>Agreement List</h1>
<table cellpadding="0" cellspacing="0" border="0" class="tableDefault" style="width: 300px !important">
<tr>
<th>
AccountType
</th>
<th>
NationalId
</th>
<th></th>
</tr>
<% For i As Integer = 0 To Model.Count - 1%>
<tr class="<%= IIF(i mod 2 = 0, "", "detailRow") %>">
<td>
<%: Model(i).AccountType%>
</td>
<td>
<%: Model(i).NationalId%>
</td>
<td>
<%: Html.RouteLink("Delete", "Delete", New With {.action="Delete", .acctType = Model(i).AccountType, .id = Model(i).NationalId})%>
</td>
</tr>
<% Next%>
<tr class="footerRow">
<td>
<%= Html.TextBox("AccountType")%>
<%= Html.ValidationMessage("AccountType", " ")%>
</td>
<td>
<%= Html.TextBox("NationalId")%>
<%= Html.ValidationMessage("NationalId"," ")%>
</td>
<td>
<a href="javascript: document.forms[0].action='/Agreement/Create'; document.forms[0].submit();">Create</a>
</td>
</tr>
</table>
<%= Html.ValidationSummary("Could not save agreement. Reasons include:", New with{.class = "red"})%>
</asp:Content>
Вот контроллер:
Namespace Web
Public Class AgreementController
Inherits System.Web.Mvc.Controller
Public Function Create(ByVal FormValues As FormCollection) As ActionResult
Dim agreement As New BusinessLayer.Agreement()
agreement.AccountType = FormValues("AccountType").ToString()
agreement.NationalId = FormValues("NationalId").ToString()
If agreement.IsValid Then
Try
agreement.Save()
Catch ex As Exception
ModelState.AddModelError("", ex.Message)
End Try
Else
For Each validationError As BusinessLayer.DataValidationMessage In agreement.GetValidationResults()
ModelState.AddModelError(validationError.Property, validationError.Message)
Next
End If
'Try
' agreement.AccountType = FormValues("AccountType").ToString()
' agreement.NationalId = FormValues("NationalId").ToString()
' agreement.Save()
'Catch dvEx As BusinessLayer.DataValidationException
' For Each validationError As BusinessLayer.DataValidationMessage In dvEx.ValidationMessages
' ModelState.AddModelError(validationError.Property, validationError.Message)
' Next
'Catch ex As Exception
' ModelState.AddModelError("", ex.Message)
'End Try
Dim agreements As New BusinessLayer.AgreementCollection()
agreements.Load()
Return View("Index", agreements)
End Function
Public Function Delete(ByVal AcctType As String, ByVal Id As String) As ActionResult
Dim agreement As New BusinessLayer.Agreement()
agreement.AccountType = AcctType
agreement.NationalId = Id
Return View("Delete", agreement)
End Function
<AcceptVerbs(HttpVerbs.Post)> _
Public Function Delete(ByVal AcctType As String, ByVal Id As String, ByVal FormValues As FormCollection) As ActionResult
Dim agreement As New BusinessLayer.Agreement(AcctType, Id)
agreement.Delete()
Return RedirectToAction("Index")
End Function
Public Function Index() As ActionResult
Dim agreements As New BusinessLayer.AgreementCollection()
agreements.Load()
' Return View("Index", agreements) is implied because the view has the same name as the action
Return View(agreements)
End Function
End Class
End Namespace