在VB中实现“部分void”

时间:2009-03-20 15:37:21

标签: vb.net

我正在关注一篇优秀的Scott Guthrie文章(MVC form posting scenarios)并尝试将其转换为VB。除了一件之外我一切都在工作。在文章的某一点上,他将自己的业务规则添加到LINQ to SQL实体中,如下所示:

public partial class Product
{
    partial void OnValidate(ChangeAction action)
    {
       ...
    }
}

在将其转换为VB时,我不确定如何翻译OnValidate的“部分”部分。如果我这样做:

Partial Public Class Product

    Private Sub OnValidate(ByVal action As ChangeAction)
       ...
    End Sub

End Class

然后我在OnValidate中运行的业务规则工作,但它不会抛出坏数据的任何异常(即十进制字段中的字符),这是有道理的,因为我基本上覆盖了产品的验证。

除了我的版本之外,确保底层类的OnValidate执行的语法是什么?

编辑:请注意,使OnValidate“Partial Private Sub”产生以下错误:

  • 部分方法必须有空方法体。
  • 方法'OnValidate'不能声明为'Partial',因为只有一个方法'OnValidate'可以标记为'Partial'。

3 个答案:

答案 0 :(得分:2)

Partial Private Sub OnValidate(ByVal action As ChangeAction)
   ...
End Sub

答案 1 :(得分:2)

通常情况下,问题出现在代码的其他地方。我一直在某处某处从“UpdateModel”切换到“TryUpdateModel”,这意味着不再抛出简单的赋值错误。回到“UpdateModel”并使用上面的“Private Sub OnValidate”现在可以正常工作。

OnValidate已在数据上下文中标记为“Partial”,因为它意味着被覆盖 - 毕竟我并没有破坏底层代码。

答案 2 :(得分:1)

将其标记为私有执行

'designer' 
Partial Class Product

    ' Definition of the partial method signature.'
    Partial Private Sub OnValidate(ByVal action As ChangeAction)
    End Sub

End Class

'your implmentation'
Partial Class Product

    ' Definition of the partial method signature.'
    Private Sub OnValidate(ByVal action As ChangeAction)
      'do things'
    End Sub

End Class

请参阅此http://msdn.microsoft.com/en-us/library/bb531431.aspx