Acabo de descargar el MVC 3.0 RC y estoy emocionado de empezar a usarlo, especialmente el motor de vistas Razor. Sin embargo, debido a un par de palo en el barro tipo de gente de aquí, estamos atrapados usando VB.NET en lugar de C#.

Cuando empecé a probarlo, me di cuenta de algunas peculiaridades. Si está creando una navaja de Afeitar ver con CSHTML, puede escribir un código como este:

@foreach(string genreName in Model.Genres)
{
    <li>@genreName</li>
}

De afeitar detectará automáticamente que el <li> texto es una etiqueta de HTML y cambiar a «modo de código». Con un VB.NET archivo VBHTML, esto no parece estar funcionando. Me hace poner la @: palabra clave en frente de cada línea como esta:

@For Each genreName As String In Model.Genres
    @:<li>@genreName</li>
Next

Si no lo tengo ahí, me sale un error en tiempo de ejecución. También, el <text></text> etiquetas no parecen funcionar.

Alguien sabe lo que está pasando aquí, o si hay alguna solución?

  • Se utiliza <text> o @<text>?
  • Además, ¿has visto esto: asp.net/webmatrix/tutorials/asp-net-web-pages-visual-basic
  • No probé @<texto>. Gracias por el enlace.
  • Usted puede usar @<li>@genreName</li> sin el : porque sus etiquetas HTML se cierre, si no fuera entonces usted necesita para utilizar @: pero no, esto es aclarado en el enlace proporcionado por Gabe. También, @<texto> también el trabajo! No me gustaría que la gente piensa que necesitan para utilizar @: todo el tiempo porque no, si este fuera el caso yo estaría a Andrew a la enfermera acerca de este hardcore 🙂
  • Sí, aquellos que todo el trabajo, pero mi punto era que en el C# plantillas que usted no necesita el carácter «@» delante de los elementos HTML. Para mí, esto los hace bastante más elegante y fácil de leer.
  • Daniels im tratando de salir ahora (sólo disparó hasta mvc 3 en vs2010 en la nueva instalación) a pesar de que @ es aún mejor que @:, si tenemos que usar @ y html normal, de hecho, no funciona como usted dice, creo que voy a escribir un nuget plugin para cambiar este comportamiento y corregir esto, tal vez mediante el desarrollo de una buena lógica sub-analizador de donde puedo saber si un usuario es la intención de html o xml literales. sería ustedes estar interesados en utilizar esta si puedo desarrollar?

InformationsquelleAutor Shea Daniels | 2010-11-12

5 Comentarios

  1. 16

    Yo diría que la razón por la que es necesaria en Vb.net es vb permite que los elementos xml en línea, mientras que c# no.

    Dim xmlMarkup = <someElement>Values</span>

    Debido a esto los naturales analizador para vb debe comportarse de manera diferente que el de c# por lo que tienes que decirle al analizador para escapar de vuelta a html mediante la @. Usted puede utilizar @ y @:.

    • Que parece que se lo explique. Es comprensible, supongo, pero hace que el VB plantillas mucho menos elegante que el de C# queridos. Oh, bueno.
    • Muy cierto – y ¿cuántas personas usan XML Literales? Nada como arruinar una nueva característica del lenguaje para apoyar una nueva legado de uno
    • Esto es ridículo… 2 años más tarde y todavía estoy poniendo @: en cada línea de código Html
    • Creo que no va a cambiar, @ScottSelby. La característica de vb no va a desaparecer en cualquier momento pronto.
  2. 4

    Como se ha mencionado anteriormente en los comentarios, pero no se recoge de manera explícita; anteponiendo la etiqueta de texto con @ soluciona el problema:

    @For Each genreName As String In Model.Genres
        @<text>
            <li>@genreName</li>
        </text>
    Next
  3. 2

    He intentado este en ASP.NET MVC 3 RC en un VBHTML vista y parece que funciona bien:

    <ul>
    @For Each i As Integer In Enumerable.Range(0, 5)
        @:<li>@i</li>
    Next
    </ul>

    Hace que este marcado:

    <ul>
        <li>0</li>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
    • He publicado en mi pregunta de que esto funciona. El problema que tengo es que en C# de las plantillas, la analiza es lo suficientemente inteligente como para reconocer el «<li>» las etiquetas, sin el «@:». Esto hace que el C# plantillas considerablemente más elegante y legible, al menos en mi opinión.
    • Usted puede usar @<li>@genreName</li> sin el : porque sus etiquetas HTML se cierre, si no fuera entonces usted necesita para utilizar @: pero no, esto es aclarado en el enlace proporcionado por Gabe. También, @<texto> también el trabajo! No me gustaría que la gente piensa que necesitan para utilizar @: todo el tiempo porque no, si este fuera el caso yo estaría a Andrew a la enfermera acerca de este hardcore 🙂
  4. 1

    Esto no utilice el mismo código que el OP, pero me estaba convirtiendo algunos de código de C# de un libro en MVC VB.NET y se quedó con la mezcla de inline HTML y código de VB. Este es el original de C#:

    @using (Html.BeginForm()) {
        @Html.ValidationSummary()
            <p>Your name: @Html.TextBoxFor(x => x.Name, new { @class = "form-control" }) </p>
            <p>Your email: @Html.TextBoxFor(x => x.Email, new { @class = "form-control" }) </p>
            <p>Your phone: @Html.TextBoxFor(x => x.Phone, new { @class = "form-control" }) </p>
            <p>Will you attend?
            @Html.DropDownListFor(x => x.WillAttend, new[] {
                    new SelectListItem() {Text = "Yes, I'll be there",
                        Value = bool.TrueString},
                    new SelectListItem() {Text = "No, I can't come",
                        Value = bool.FalseString}
                }, "Choose an option", new { @class = "form-control" })
            </p>
    }

    y estas son las diferentes formas de representar en VB:

    @Using Html.BeginForm()
    @:<p>Your name: @Html.TextBoxFor(Function(x) x.Name)</p>
    @:<p>Your email: @Html.TextBoxFor(Function(x) x.Email)</p>
    @:<p>Your phone: @Html.TextBoxFor(Function(x) x.Phone)</p>
    @:<p>Will you attend?
    @Html.DropDownListFor(Function(x) x.WillAttend, New SelectListItem() {New SelectListItem() With {.Text = "Yes", .Value = Boolean.TrueString}, New SelectListItem() With {.Text = "No", .Value = Boolean.FalseString}})
    @:</p>
    End Using
    @Using Html.BeginForm()
    @<text>
    <p>Your name: @Html.TextBoxFor(Function(x) x.Name)</p>
    <p>Your email: @Html.TextBoxFor(Function(x) x.Email)</p>
    <p>Your phone: @Html.TextBoxFor(Function(x) x.Phone)</p>
    <p>Will you attend?
    @Html.DropDownListFor(Function(x) x.WillAttend, New SelectListItem() {New SelectListItem() With {.Text = "Yes", .Value = Boolean.TrueString}, New SelectListItem() With {.Text = "No", .Value = Boolean.FalseString}})
    </p>
    </text>
    End Using
    @code
    Using Html.BeginForm()
    @:<p>Your name: @Html.TextBoxFor(Function(x) x.Name)</p>
    @:<p>Your email: @Html.TextBoxFor(Function(x) x.Email)</p>
    @:<p>Your phone: @Html.TextBoxFor(Function(x) x.Phone)</p>
    @:<p>Will you attend?
    @Html.DropDownListFor(Function(x) x.WillAttend, New SelectListItem() {New SelectListItem() With {.Text = "Yes", .Value = Boolean.TrueString}, New SelectListItem() With {.Text = "No", .Value = Boolean.FalseString}})
    @:</p>
    End Using
    End Code
    @code    
    Using Html.BeginForm()
    @<text>
    <p>Your name: @Html.TextBoxFor(Function(x) x.Name)</p>
    <p>Your email: @Html.TextBoxFor(Function(x) x.Email)</p>
    <p>Your phone: @Html.TextBoxFor(Function(x) x.Phone)</p>
    <p>Will you attend?
    @Html.DropDownListFor(Function(x) x.WillAttend, New SelectListItem() {New SelectListItem() With {.Text = "Yes", .Value = Boolean.TrueString}, New SelectListItem() With {.Text = "No", .Value = Boolean.FalseString}})
    </p>
    </text>
    End Using
    End Code

    Lo que debería ser obvio a partir de esto es que cuando usted necesita incluir inline HTML dentro de un bloque de código que necesita el prefijo de cada línea con un @: o encierre el código HTML con un @<text></text> bloque. También es obvio que esto se aplica cuando se utiliza @CodeEnd Code en lugar de partir de un bloque de código con @.

    p.s. Tenga en cuenta que el @<text></text> etiquetas no son la salida a la página, de modo que no interfiere con nada

  5. 0

    ACTUALIZACIÓN:

    Puede utilizar @[email protected]/li sin el : porque sus etiquetas HTML se cierre, si no fuera entonces usted necesita para utilizar @: pero no, esto es aclarado en el enlace proporcionado por Gabe. También, @<text> también funciona! No me gustaría que la gente piensa que necesitan para utilizar @: todo el tiempo porque no, si este fuera el caso yo estaría a Andrew a la enfermera acerca de este hardcore 🙂
    ACTUALIZACIÓN DE FIN DE

    Aquí es la sintaxis básica para vb de afeitar,

    El carácter @ se inicia expresiones en línea, de una sola declaración de los bloques, y de varios bloques de declaración:

    ?
    <!-- Single statement blocks  -->
    @Code  Dim total = 7  End Code
    @Code  Dim myMessage = "Hello World" End Code
     
    <!-- Inline expressions -->
    <p>The value of your account is: @total </p>
    <p>The value of myMessage is: @myMessage</p>
            
         
    <!-- Multi-statement block -->
    @Code
        Dim greeting = "Welcome to our site!"
        Dim weekDay = DateTime.Now.DayOfWeek
        Dim greetingMessage = greeting & " Today is: " & weekDay.ToString()
    End Code
    <p>The greeting is: @greetingMessage</p>

    Por lo que debe funcionar, basta con cerrar el modo de código al final de la línea y su espalda en HTML, esto podría evitar que el uso de la @: – caza a ellon, yo creo que él está tratando de no tener que usar @:

    • Recta copiar y pegar desde la url de arriba vinculado int comentarios sin responder a su pregunta…
    • Le respondí a su pregunta al final. También he copiado pegado ya que la respuesta está ahí y nadie lo señaló a él, yo también pensaba que no podía leer el enlace desde el enlace de respuestas a su pregunta y todo el mundo ha ignorado de manera importante a señalar. Además estoy respondiendo el problema de él no querer hacer @: porque es desagradable aspecto. Isjob: ¿esta aclarar sus inquietudes con mi post?
    • ¿Usted realmente no tiene mucho más que hacer que criticar a la gente tratando de ayudar? No veo que tienes de hacer contribuciones a sus preguntas.
    • Usted acaba de decir que su código debería funcionar y publicado ejemplos que ni siquiera incluyen el html relacionados ejemplos de los primeros ejemplos de la página vinculada. Los ejemplos no tienen nada que ver con escapar de vuelta a html. Que fue la inquietud que tenía con su respuesta. No quiero hacer contribuciones cuando otros parecen haber respondido a la pregunta suficientemente. Al final de cada respuesta dijo que «se debe trabajar» en lugar de «por qué». Que una persona intentó hacer…si él está en lo correcto, no sé, pero me gustaría saber la respuesta – su respuesta no lo es aunque.
    • He le mostró cómo él no necesita salir de nuevo en HTML si se utiliza código @y, a continuación, Código de Fin en el final, que es menos complicada de usar @: – todavía no veo por qué crees que no he respondido a la pregunta. Después de la finalización de código, su bastante atrás en el modo HTML! No creo que yo podría hacer que la más clara.
    • Usted puede usar @<li>@genreName</li> sin el : porque sus etiquetas HTML se cierre, si no fuera entonces usted necesita para utilizar @: pero no, esto es aclarado en el enlace proporcionado por Gabe. También, @<texto> también el trabajo! No me gustaría que la gente piensa que necesitan para utilizar @: todo el tiempo porque no, si este fuera el caso yo estaría a Andrew a la enfermera acerca de este hardcore 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here