roast_soul
roast_soul

Reputation: 3640

Default value for TextBoxFor in ASP.NET MVC

In ASP.NET MVC, I wrote below code to give the textbox a initial value:

@Html.TextBoxFor(p => p.WEIGHT, new { tabindex = "140", 
                                      @class = "mustInputText noime  w50", 
                                      maxlength = "8", @Value = "0", 
                                      rule = "InputOnlyNum" })

And the Html source is as follows:

<input Value="0" class="mustInputText noime  w50" id="WEIGHT" maxlength="8" 
    name="WEIGHT" rule="InputOnlyNum" tabindex="140" type="text" value="" />

I notices that there are two Value attributes in the "input" tag: Value="0" and value=""

How to make it only show one value attribute?

Upvotes: 5

Views: 20995

Answers (6)

Krishna Soni
Krishna Soni

Reputation: 95

   @Html.TextBoxFor(p => p.WEIGHT, new { tabindex = "140", @class = "mustInputText noime  w50", maxlength = "8",
 @value =  model.WEIGHT==null?"0":model.WEIGHT, rule = "InputOnlyNum" })

Upvotes: 0

rivarolle
rivarolle

Reputation: 1538

Use TextBox instead of TextBoxFor

@Html.TextBox("WEIGHT", Model.WEIGHT ?? "0", new {...})

or if WEIGHT is an empty string

@Html.TextBox("WEIGHT", Model.WEIGHT == "" ? "0" : Model.WEIGHT, new {...})

Upvotes: 7

Kaizen Programmer
Kaizen Programmer

Reputation: 3818

Maybe this? Untested.

@Html.TextBoxFor(p => (p.WEIGHT==null ? 0 : p.WEIGHT), new { tabindex = "140", 
      @class = "mustInputText noime  w50", 
      maxlength = "8",  
      rule = "InputOnlyNum" })

Upvotes: 0

AaronLS
AaronLS

Reputation: 38367

Untested, but try TextBox instead of TextBoxFor, as it has an overload for passing the value as the second parameter.

@Html.TextBox(p => p.WEIGHT, "0",
    new { tabindex = "140", @class = "mustInputText noime  w50", 
          maxlength = "8", @Value = "0", rule = "InputOnlyNum" })

The other option is to set defaults in the constructor of the model class that initializes WEIGHT.

Upvotes: 0

Bryan Hong
Bryan Hong

Reputation: 1483

It seems to be the default behavior. If you really want to avoid the double Value attributes, it's better to follow the cleaner way by setting the default value in the create method of the controller class. This follows the ideology of the MVC pattern.

//GET
public ActionResult CreateNewEntity()
{
    YourEntity newEntity= new YourEntity ();
    newEntity.WEIGHT= 0;

    return View(newEntity);
}

Then on your view, you won't need to use the value attribute anymore:

@Html.TextBoxFor(p => p.WEIGHT, new { tabindex = "140", 
                                      @class = "mustInputText noime  w50",     
                                      maxlength = "8", 
                                      rule = "InputOnlyNum" })

Your resulting html is:

<input class="mustInputText noime  w50" 
       id="WEIGHT" 
       maxlength="8" 
       name="WEIGHT" 
       rule="InputOnlyNum" 
       tabindex="140" 
       type="text" 
       value="0" />

Upvotes: 5

Darren
Darren

Reputation: 70718

Well you've explicitly stated Value, not value.

Try:

 @Html.TextBoxFor(p => p.WEIGHT, new { tabindex = "140", @class = "mustInputText noime  w50", maxlength = "8", @value = "0", rule = "InputOnlyNum" })

Upvotes: 3

Related Questions