tags:

views:

408

answers:

1

I am working with asp.net mvc and creating a form. I want to add a class attribute to the form tag.

I found an example here of adding a enctype attribute and tried to swap out with class. I got a compile error when accessing the view.

I then found an example of someone adding a @ symbol to the beginning of the property name and that worked. Great that it works, but I am one that needs to know why and a quick Google search was not helpful. I understand that C# allows one to prepend the @ to a string to ignore escaping chars. Why does it work in this case? What does the @ tell the compiler?

Code that produces a compile error?

 <% Html.BeginForm("Results", "Search", 
    FormMethod.Get, new{class="search_form"}); %>

Code that does work:

 <% Html.BeginForm("Results", "Search", 
    FormMethod.Get, new{@class="search_form"}); %>
+32  A: 

In C#, 'class' is a reserved keyword - adding an '@' symbol to the front of a reserved keyword allows you to use the keyword as an identifier.

Here's an example straight out of the C# spec:

class @class {
    public static void @static(bool @bool) {
        if (@bool) System.Console.WriteLine("true");
        else System.Console.WriteLine("false");
    }
}

Note: this is of course an example, and not recommended practice.

Erik Forbes
I guess that would make sense. I was looking way too deep to find the answer to this one.
GrillerGeek
I know how you feel. =)
Erik Forbes
Nice! I was not aware of that ... +1
Daniel Brückner
example code is way scary! class @class, bool @bool, switch (@switch). Fun to be had with class @struct, or bool @int... It make this possible: public static @static @static;
Michael Meadows
+1 learning things on SO.
bendewey
Yeah - definitely a readability nightmare if taken to the extreme like the example.
Erik Forbes