2010-11-09 20 views
6

Estoy tratando de crear un formulario oculto de acuerdo con la especificación de HTML5, donde el atributo oculto se utiliza sin un valor. Ahora no tengo idea de cómo forzar a que en el métodoasp.net mvc htmlattribute sin valor

<% Html.BeginForm("ChangeContent", "Content", FormMethod.Post, new {hidden}); %> 

asp.net mvc de que la anterior no se compila con

Compiler Error Message: CS0103: The name 'hidden' does not exist in the current context 

Cualquiera sabe una salida?

EDITAR

Sólo por curiosidad usando ayudantes html por defecto?

+0

creo que es simplemente mejor usar HTML normal en lugar de ayudantes HTML y al final se termina de escribir la misma cantidad de código y no veo qué beneficio que se obtiene de la ayudante. –

Respuesta

5

Tengo la sensación de que el método por defecto BeginForm no va a hacer lo que quiera. Puede crear un nuevo BeginForm método que va a emitir la etiqueta <form> como desee, o simplemente escribir la etiqueta <form> manualmente en HTML y rellenar el URL usando el motor de enrutamiento:

<form action="<%: Url.Action("ChangeContent", "Content") %>" method="post" hidden> 
    ... 
</form> 

ACTUALIZACIÓN:

Para responder a la edición de su pregunta, esto no es posible utilizando los ayudantes estándar. Aquí está la referencia en MSDN: http://msdn.microsoft.com/en-us/library/dd492714.aspx. De acuerdo con la documentación, los atributos deben ser pares nombre/valor.

+0

Bueno, lo sé, solo quería saber si es posible con los ayudantes estándar. – Trimack

+0

Actualicé mi respuesta después de algunas investigaciones. Según MSDN, los atributos deben estar en pares nombre/valor. Espero que esto cambie en el futuro ahora que HTML5 se está volviendo más popular. Aún no he examinado MVC3 para ver si este sigue siendo el caso. – mkchandler

4

La colección HtmlAttribute consiste en pares clave-valor y aquí hidden es la clave. Tienes que darle un valor también. Como lo ha escrito ahora, el compilador lo interpreta como si estuviera haciendo referencia a la variable hidden, que no ha definido.

Si desea hidden = "" en el código HTML, utilice

<% Html.BeginForm("ChangeContent", "Content", FormMethod.Post, new { hidden = "" }); %> 

De acuerdo con la Specc:

hidden es una boolean attribute. atributos booleanos pueden ser indicados de varias maneras [ref]:

La presencia de un atributo booleano en un elemento representa el valor verdadero, y la ausencia del atributo representa el valor falso.

Si el atributo está presente, su valor debe ser la cadena vacía o un valor que es una coincidencia entre mayúsculas y minúsculas ASCII de nombre canónico del atributo , sin iniciales o finales espacios en blanco.

En otras palabras, el atributo hidden se puede representar de tres maneras

<... hidden ...> 
<... hidden="" ...> 
<... hidden="hidden" ...> 
+0

Y ahí está el problema. Si uso lo que sugieres, terminaría con 'hidden =" "' en el código. Pero solo quiero 'oculto'. – Trimack

+0

No estoy seguro de si esto es posible usando los ayudantes Html. Sin embargo, no hay nada de malo en dejar pasar a los ayudantes y simplemente poner su formulario directamente en el marcado. – Chev

+0

@Chevex Estoy pensando lo mismo. He publicado una respuesta que hace exactamente eso. – mkchandler

2

Solo use string.Empty, saldrá sin ningún atributo. Al menos lo hace en MVC 5.

@using (Html.BeginForm("Login", "Main", FormMethod.Post, new { name = "loginForm", ng_controller = "loginController", @class = "form-horizontal", novalidate = string.Empty})).... 
Cuestiones relacionadas