у меня есть свой автоматически сгенерированный linq к sql классам, и я расширяю этот класс с помощью частичной классификации (вместо того, чтобы использовать наследование), и у меня есть свойства что, что я вставил позже, которые не являются частью модели базы данных и не должны быть. это вещи как "FinalPrice" и "DisplayFinalPrice" - в dbase, существует только RetailPrice и WholesalePrice, таким образом, FinalPrice и т.д. больше похожи на расширения dbase полей.
когда я отправляю форму ни с чем заполненным, "FinalPrice" называют ('получение' свойства) даже tho, я никогда не прошу его быть, и даже tho это не нужно. это происходит перед проверкой, таким образом, я даже не получаю ошибки проверки, я добрался бы.
я попытался использовать и на свойствах FinalPrice и FinalPriceDisplay - никакие не идут! почему это происходит и как я могу мешать ему произойти? modelstate просто пытается проверить все поэтому, что он называет каждый объект независимо от того, что?
для заинтересованных, вот весь код...
Частичный Общедоступный Класс tProduct 'Наследовал tProduct Частную Константу CommissionMultiplier, Столь же Десятичный = CDec (1.18) Частный _FinalPrice Как Десятичное число? Частный _DisplayFinalPrice Как Строка Частный _DisplayNormalPrice Как Строка
Public Property CategoryComplete As Short
<ScaffoldColumn(False)>
Public ReadOnly Property FinalPrice As Decimal
Get
'If RetailPrice IsNot Nothing OrElse WholesalePrice IsNot Nothing Then
If _FinalPrice Is Nothing Then
If RetailPrice IsNot Nothing Then
_FinalPrice = RetailPrice
Else
_FinalPrice = WholesalePrice * CommissionMultiplier ' TODO: this should be rounded to the nearest 5th cent so prices don't look weird.
End If
Dim NormalPart = Decimal.Floor(_FinalPrice.Value)
Dim DecimalPart = _FinalPrice.Value - NormalPart
If DecimalPart = 0 OrElse DecimalPart = 0.5 Then
Return _FinalPrice
ElseIf DecimalPart > 0 AndAlso DecimalPart < 0.5 Then
DecimalPart = 0.5 ' always rounded up to the nearest 50 cents.
ElseIf DecimalPart > 0.5 AndAlso DecimalPart < 1 Then
' Only in this case round down if its about to be rounded up to a valeu like 20, 30 or 50 etc as we want most prices to end in 9.
If NormalPart.ToString.LastChr.ToInt = 9 Then
DecimalPart = 0.5
Else
DecimalPart = 1
End If
End If
_FinalPrice = NormalPart + DecimalPart
End If
Return _FinalPrice
'End If
End Get
End Property
<ScaffoldColumn(False)>
Public ReadOnly Property DisplayFinalPrice As String
Get
If _DisplayFinalPrice.IsNullOrEmpty Then
_DisplayFinalPrice = FormatCurrency(FinalPrice, 2, TriState.True)
End If
Return _DisplayFinalPrice
End Get
End Property
Public ReadOnly Property DisplayNormalPrice As String
Get
If _DisplayNormalPrice.IsNullOrEmpty Then
_DisplayNormalPrice = FormatCurrency(NormalPrice, 2, TriState.True)
End If
Return _DisplayNormalPrice
End Get
End Property
Public ReadOnly Property DivID As String
Get
Return "pdiv" & ProductID
End Get
End Property
End Class
еще...
я арестован здесь, за исключением нулевой ссылки, говоря мне это должно содержать значение...
Dim NormalPart = Decimal.Floor(_FinalPrice.Value)
я могу избавиться от проблемы, просто перенеся прокомментированный, если оператор в коде, но это нельзя назвать для начала, и это - проблема, я имею.
Похоже, вы столкнулись с этой проблемой (может быть, такая же проблема?):
Почему ASP.NET MVC заботится о моих свойствах только для чтения во время привязки данных?