Both Of them provide same output, however HTML.TEXTBOXFOR is strongly type and HTML.TEXTBOX is not.
The TextBoxFor is a newer MVC input extension introduced in MVC2.The main benefit of the newer strongly typed extensions is to show any errors / warnings at compile-time rather than runtime.
The typed TextBoxFor will generate your input names for you. This is usually just the property name but for properties of complex types can include an underscore such as 'customer_name' Using the typed TextBoxFor version will allow you to use compile time checking. So if you change your model then you can check whether there are any errors in your views.
Both is use to create textbox but HTML.Textbox is loosly type means we can pass any name whatever we want i.e HTML.TextBox(“ABC”) but in case of HTML.TextBoxFor we must use the property which are available in particular model suppose you create one model like Customer and that contains 3 properties like Firstname , Lastname and MiddleName so in this case in our view we can use this 3 properties only , if we try to pass another property like HTML.TextBoxFor(m=>m.Age) will throws an error because we are trying to create textbox for age property which is not available in our model
- HTML.TEXTBOX: when we have not use model class. - HTML.TEXTBOXFOR: when we have use model class.