Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

label or @html.Label ASP.net MVC 4

Newbie to ASP.net MVC 4 and trying to make sense of Razor. If I wanted to just display some text in my .cshtml page, can I use

<label class="LabelCSSTop">Introduction</label>

or should I use:

 @Html.Label("STW", htmlAttributes: new { @class = "LabelCSSTop" })

Not sure if one is preferred over the other or if either is okay. If the latter emits the label tag anyway, should I just stick to the former?

Again, if I just wanted to display a text box, can I just do this:

<input id="txtName" type="text" />

or should I do this:

@Html.TextBox("txtName", "")

Is there a situation when I should use the @Html over the regular html tag?

Thanks in advance!!

like image 254
alpha Avatar asked Apr 25 '13 18:04

alpha


People also ask

How does HTML LabelFor work?

HTML label: Main TipsHTML label acts as a caption for a specified element. It is very convenient to use HTML label for <input> elements. It increases the clickable area, as clicking the label activates the input as well. An input element can also be nested inside the HTML label tag.

What is HTML ActionLink in MVC?

Html. ActionLink creates a hyperlink on a view page and the user clicks it to navigate to a new URL. It does not link to a view directly, rather it links to a controller's action.


2 Answers

In the case of your label snippet, it doesn't really matter. I would go for the simpler syntax (plain HTML).

Most helper methods also don't allow you to surround another element. This can be a consideration when choosing to use/not use one.

Strongly-Typed Equivalents

However, it's worth noting that what you use the @Html.[Element]For<T>() methods that you gain important features. Note the "For" at the end of the method name.

Example:

@Html.TextBoxFor( o => o.FirstName )

This will handle ID/Name creation based on object hierarchy (which is critical for model binding). It will also add unobtrusive validation attributes. These methods take an Expression as an argument which refers to a property within the model. The metadata of this property is obtained by the MVC framework, and as such it "knows" more about the property than its string-argument counterpart.

It also allows you to deal with UI code in a strongly-typed fashion. Visual Studio will highlight syntax errors, whereas it cannot do so with a string. Views can also be optionally compiled along with the solution, allowing for additional compile-time checks.

Other Considerations

Occasionally a HTML helper method will also perform additional tasks which are useful, such as Html.Checkbox and Html.CheckboxFor which also create a hidden field to go along with the checkbox. Another example are the URL-related methods (such as for a hyperlink) which are route-aware.

<!-- bad -->
<a href="/foo/bar/123">my link</a>

<!-- good -->
@Html.ActionLink( "my link", "foo", "bar", new{ id=123 } )

<!-- also fine (perhaps you want to wrap something with the anchor) -->
<a href="@Url.Action( "foo", "bar", new{ id=123 } )"><span>my link</span></a>

There is a slight performance benefit to using plain HTML versus code which must be executed whenever the view is rendered, although this should not be the deciding factor.

like image 51
Tim M. Avatar answered Jan 16 '23 18:01

Tim M.


Depends on what your are doing.

If you have SPA (Single-Page Application) the you can use:

<input id="txtName" type="text" />

Otherwise using Html helpers is recommended, to get your controls bound with your model.

like image 45
Ahmed El Kilani Avatar answered Jan 16 '23 18:01

Ahmed El Kilani