2010-11-09 13 views
6

Próbuję utworzyć ukryty formularz zgodnie ze specyfikacją HTML5, w której ukryty atrybut jest używany bez wartości. Teraz nie mam pojęcia w jaki sposób zmusić go doasp.net mvc htmlattribute bez wartości

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

metody ASP.NET MVC jako jeden powyżej nie skompilować z

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

Każdy zna jakieś wyjście?

EDIT

Tak z ciekawości przy użyciu domyślnych pomocników html?

+0

Myślę, że lepiej jest używać zwykłego html'a zamiast html, w końcu piszesz tę samą ilość kodu i nie widzę korzyści, jakie możesz uzyskać od helpera. –

Odpowiedz

5

Mam wrażenie, że domyślna metoda BeginForm nie zrobi tego, co chcesz. Można też utworzyć nową BeginForm metodę, która będzie wyjście tag <form> jak chcesz, lub po prostu napisać tag <form> ręcznie w HTML i przesłanie adresu URL za pomocą silnika routingu:

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

UPDATE:

Aby odpowiedzieć na edycję pytania, nie jest to możliwe przy użyciu standardowych pomocy. Oto referencja na temat MSDN: http://msdn.microsoft.com/en-us/library/dd492714.aspx. Zgodnie z dokumentacją atrybuty muszą być parami nazwa/wartość.

+0

Wiem, chciałem tylko wiedzieć, czy jest to możliwe ze standardowymi pomocnikami. – Trimack

+0

Zaktualizowałem moją odpowiedź po przeprowadzeniu pewnych badań. Według MSDN atrybuty muszą znajdować się w parach nazwa/wartość. Mam nadzieję, że zmieni się to w przyszłości teraz, gdy HTML5 staje się coraz bardziej popularny. Nie analizowałem jeszcze MVC3, aby sprawdzić, czy tak się dzieje. – mkchandler

4

Kolekcja HtmlAttribute składa się z par klucz-wartość, a kluczem jest tutaj hidden. Musisz nadać jej również wartość. Jak napisałeś to teraz, kompilator interpretuje to tak, jakbyś odwoływał się do zmiennej hidden, której nie zdefiniowałeś.

Jeśli chcesz hidden = "" w kodzie HTML, użyj

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

Według specc:

hidden jest boolean attribute. Boolowskie atrybuty mogą być wskazane na kilka sposobów [ref]:

Obecność logicznej atrybutu element stanowi rzeczywistej wartości, i brakiem atrybutu oznacza fałszywą.

Jeśli atrybut jest obecny, jego wartość musi być albo pusty ciąg lub wartość że jest ASCII wielkości liter pasuje do nazwy kanonicznej atrybutu , bez prowadzącego lub końcowe białe znaki.

Innymi słowy, atrybut hidden można przedstawić na trzy sposoby

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

I jest problem. Jeśli użyję tego, co sugerujesz, otrzymam słowo "hidden =" "" w kodzie. Ale chcę po prostu "ukryte". – Trimack

+0

Nie jestem pewien, czy jest to możliwe przy użyciu helperów HTML. Jednak z pewnością nie ma nic złego w przekazywaniu pomocy i po prostu umieszczeniu formularza bezpośrednio w znacznikach. – Chev

+0

@Chevex Myślę o tym samym. Wysłałem odpowiedź, która dokładnie to robi. – mkchandler

2

Po prostu użyj string.Empty, wyświetli się bez atrybutu. Przynajmniej robi to w MVC 5.

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