【问题标题】:MVC 2: Html.TextBoxFor, etc. in VB.NET 2010MVC 2:VB.NET 2010 中的 Html.TextBoxFor 等
【发布时间】:2010-05-09 00:05:49
【问题描述】:

我有这个 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:

" %>

这里是Model类的定义;默认项目命名空间是 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

谢谢。

【问题讨论】:

  • 什么不起作用?运气不好并不能很好地描述您遇到的实际问题。
  • 我收到错误消息;当我没有指定 As Type 时,它​​会给我一个错误,它找不到该属性;当我删除 As Type 时,它​​说它需要对象...我定义了一个 @Imports 来引用对象的命名空间,因此该对象应该可以在视图中访问...我得到波浪线表示错误,当我运行时,它说动态编译的类在继承语句中有错误(缺少 _ 或其他东西,我不明白)......你让 Html.TextBoxFor 和 ValidationMessageFor 在 VB 中工作吗?你让它在 VB 中工作吗?

标签: asp.net asp.net-mvc asp.net-mvc-2 views inline-functions


【解决方案1】:

啊,我太笨了;我的继承使用了 ,仅适用于 C#;我需要:

System.Web.Mvc.ViewPage(Of MyModel)

这样就修复了错误。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 是的,我做到了。我将它设置为一个 VB 项目,并且我有 VB 语言。您是否让 Html.TextBoxFor 和 ValidationMessageFor 在 VB 中工作?你觉得这个定义有什么问题吗?
    【解决方案3】:

    我不是 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>" %> 
    

    【讨论】:

      【解决方案4】:

      编辑:更新;发现 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 取胜 :-) 有什么想法吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多