MVC 2: Html.TextBoxFor, etc. en VB.NET 2010
-
04-10-2019 - |
Question
J'ai cet exemple ASP.NET MVC 2.0 vue en C #, lié à un modèle fortement typé qui a un prénom, nom et adresse électronique:
<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>
Je me suis converti à VB.NET, voir les constructions appropriées VB.NET 10, comme:
<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>
Non chance. Est-ce droit, et sinon, quelle syntaxe dois-je utiliser? Encore une fois, j'utilise ASP.NET MVC 2.0, version liée à un modèle fortement typé ... ne MVC 2 toujours pas en charge les nouvelles constructions de langage .NET 2010?
Il est un projet VB.NET et je référence correctement VB avec cet en-tête:
"%>Voici la définition de la classe modèle; l'espace de noms par défaut du projet est 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
Merci.
La solution
Ahh, muet de ma part; mes inherits utilisés <>, qui est C # seulement; Je avais besoin:
System.Web.Mvc.ViewPage(Of MyModel)
Et corrigé l'erreur.
Autres conseils
Avez-vous modifié la langue dans la directive Page:
<%@ Page
Language="VB"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<SomeModel>" %>
Je ne suis pas un expert en VB mais je pense que cela
<%@ Page
Title=""
Language="VB"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage" %>
devrait être changé à cette
<%@ Page
Title=""
Language="VB"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<Models.Validation.ValidationSampleTestClass>" %>
EDIT: Une mise à jour; ont découvert que TextBoxFor regards pour Expression (Of Func (Of Object, Object)) et par coulée pour ce faire, il fonctionne:
<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>
Mais maintenant, je reçois une erreur d'exécution:
Description: Une erreur est survenue lors de la compilation d'une ressource nécessaire pour cette demande. S'il vous plaît consulter les détails d'erreur spécifique et modifier votre code source appropriée.
Compiler Message d'erreur: BC30205:. Fin de la déclaration attendue
Erreur source:
Ligne 46: _ Ligne 47: Classe publique views_validation_index_aspx Ligne 48: Hérite System.Web.Mvc.ViewPage Ligne 49: Met en œuvre System.Web.SessionState.IRequiresSessionState, System.Web.IHttpHandler Ligne 50:
Fichier source: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files de racine \ 5a4e2626 \ dee8be7e \ App_Web_index.aspx.b3b8acce.cmmfnwms.0.vb ligne: 48
Je ne peux pas gagner avec VB :-) idées?