Частичный метод OnValidate VB.Net не будет запускаться для примера кода NerdDinner - PullRequest
0 голосов
/ 28 апреля 2009

У меня проблема с тем, что gfrizzle сказал, что имел, но затем сказал здесь , что он это исправил Я посмотрел на пост и реализовал то, что он сказал, чтобы делать, но он все еще не работает для меня (если gfrizzle видит это, я хотел бы увидеть его код)

Чтобы переформулировать проблему, я хочу создать бизнес-правила, которые отделены от кода DAL, сгенерированного моей моделью L2S. В соответствии с примером NerdDinner (который написан на C #) этот код должен быть в частичном классе, как мой ниже.

Если кто-нибудь может помочь, дайте мне знать, что мой частичный класс в моем коде класса контроллера написан ниже

<HandleError()> _
Public Class PreOrderController
  Inherits System.Web.Mvc.Controller

  Private db As New FOTAZDataContext  'with EF this would be FOTAZDBEntities, see the web.config

  ' GET: /PreOrder/Create
  Function Create() As ActionResult
    Dim registrationToCreate As New Registration()
    PopulateDropDownListBoxesForCreate()
    Return View()
  End Function

  ' POST: /PreOrder/Create  include:="MerchandiseID,Quantity"
  <AcceptVerbs(HttpVerbs.Post)> _
  Function Create(<Bind(Exclude:="ID")> ByVal preOrderToCreate As PreOrder) As ActionResult

    If ModelState.IsValid Then
      Try
        preOrderToCreate.RegistrationID = GetRegistrationID()
        db.PreOrders.InsertOnSubmit(preOrderToCreate)
        db.SubmitChanges()
        Return RedirectToAction("Index")
      Catch
        For Each issue In preOrderToCreate.GetRuleViolations()
          ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage)
        Next
      End Try
    End If
    PopulateDropDownListBoxesForCreate()
    Return View("Create")

  End Function

  Sub PopulateDropDownListBoxesForCreate()
    Dim merchandise = db.Merchandises.ToList()
    ViewData("MerchandiseID") = New SelectList(merchandise, "ID", "Descr")
  End Sub


Imports System.Data.Linq
Partial Public Class PreOrder

  Public ReadOnly Property IsValid() As Boolean
    Get
      Return (GetRuleViolations().Count() = 0)
    End Get
  End Property

  Public Function GetRuleViolations() As IEnumerable(Of RuleViolation)
    Dim ret = New List(Of RuleViolation)()

    If Not IsNumeric(Quantity) Then
      ret.Add(New RuleViolation("Quantity", "Quantity is not numeric"))
    End If
    Return ret

  End Function

  'This isn't getting called.
  Private Sub OnValidate(ByVal action As ChangeAction)
    If Not IsValid Then
      Throw New ApplicationException("Rule violations prevent saving")
    End If
  End Sub
End Class

1 Ответ

1 голос
/ 30 апреля 2009

Я понял это (более или менее). Я получил порядок двух параметров в обратном направлении ...

ret.Add(New RuleViolation("Quantity", "Quantity is not numeric"))

должно быть

ret.Add(New RuleViolation("Quantity is not numeric", "Quantity"))

Я до сих пор не понимаю, что я полностью понимаю это. Ну хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...