1

我在 C# 中有这个示例 ASP.NET MVC 2.0 视图,绑定到具有名字、姓氏和电子邮件的强类型模型:

<div>
    First: <%= Html.TextBoxFor(i => i.FirstName) %>
    <%= Html.ValidationMessageFor(i => i.FirstName, "*") %>
</div>
<div>
    Last: <%= Html.TextBoxFor(i => i.LastName) %>
    <%= Html.ValidationMessageFor(i => i.LastName, "*")%>
</div>
<div>
    Email: <%= Html.TextBoxFor(i => i.Email) %>
    <%= Html.ValidationMessageFor(i => i.Email, "*")%>
</div>

我将其转换为 VB.NET,在 VB.NET 10 中看到了适当的结构,如下所示:

<div>
    First: <%= Html.TextBoxFor(Function(i) i.FirstName) %>
    <%= Html.ValidationMessageFor(Function(i) i.FirstName, "*") %>
</div>
<div>
    Last: <%= Html.TextBoxFor(Function(i) i.LastName)%>
    <%= Html.ValidationMessageFor(Function(i) i.LastName, "*")%>
</div>
<div>
    Email: <%= Html.TextBoxFor(Function(i) i.Email)%>
    <%= Html.ValidationMessageFor(Function(i) i.Email, "*")%>
</div>

没运气。这是正确的,如果不是,我需要使用什么语法?同样,我使用的是 ASP.NET MVC 2.0,这是一个绑定到强类型模型的视图...... MVC 2 仍然不支持 .NET 2010 中的新语言结构吗?

这是一个 VB.NET 项目,我用这个头文件正确地引用了 VB:

" %>

这是模型类的定义;默认项目命名空间是 MvcSample.VB:

Namespace Models.Validation
    Public Class ValidationSampleTestClass
        <Required(ErrorMessage:="First name required.")> _
        Public Property FirstName() As String
            Get
                Return m_FirstName
            End Get
            Set(ByVal value As String)
                m_FirstName = value
            End Set
        End Property
        Private m_FirstName As String
        .
        .
        .
    End Class
End Namespace

谢谢。

4

4 回答 4

2

啊,我很愚蠢;我的继承使用了 <>,仅适用于 C#;我需要:

System.Web.Mvc.ViewPage(Of MyModel)

这解决了错误。

于 2010-05-10T00:44:39.050 回答
1

我不是 VB 专家,但我认为这

    <%@ Page 
Title="" 
Language="VB" 
MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="System.Web.Mvc.ViewPage" %> 

应该改成这个

    <%@ Page 
Title="" 
Language="VB" 
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<Models.Validation.ValidationSampleTestClass>" %> 
于 2010-05-09T18:04:36.030 回答
1

您是否更改了 Page 指令中的语言:

<%@ Page 
    Language="VB" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<SomeModel>" %>
于 2010-05-09T05:59:12.750 回答
0

编辑:更新;发现 TextBoxFor 寻找 Expression(Of Func(Of Object, Object)) 并通过强制转换来做到这一点:

<div>
    First: <%= Html.TextBoxFor(Function(i) DirectCast(i, ValidationSampleTestClass).FirstName)%>
    <%= Html.ValidationMessageFor(Function(i) DirectCast(i, ValidationSampleTestClass).FirstName, "*")%>
</div>
<div>
    Last: <%= Html.TextBoxFor(Function(i) DirectCast(i, ValidationSampleTestClass).LastName)%>
    <%= Html.ValidationMessageFor(Function(i) DirectCast(i, ValidationSampleTestClass).LastName, "*")%>
</div>
<div>
    Email: <%= Html.TextBoxFor(Function(i) DirectCast(i, ValidationSampleTestClass).Email)%>
    <%= Html.ValidationMessageFor(Function(i) DirectCast(i, ValidationSampleTestClass).Email, "*")%>
</div>

但现在我得到一个运行时错误:

说明:在编译服务此请求所需的资源期间发生错误。请查看以下特定错误详细信息并适当修改您的源代码。

编译器错误消息:BC30205:预期语句结束。

源错误:

第 46 行:_ 第 47 行:公共类 views_validation_index_aspx 第 48 行:继承 System.Web.Mvc.ViewPage 第 49 行:实现 System.Web.SessionState.IRequiresSessionState、System.Web.IHttpHandler 第 50 行:

源文件:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\5a4e2626\dee8be7e\App_Web_index.aspx.b3b8acce.cmmfnwms.0.vb 行:48

我不能用 VB 取胜 :-) 有什么想法吗?

于 2010-05-09T18:01:22.513 回答