Html.EditorFor Set Default Value

C#asp.net Mvcasp.net Mvc-3

C# Problem Overview


Rookie question. I have a parameter being passed to a create view. I need to set a field name with a default value. @Html.EditorFor(model => model.Id) I need to set this input field with name Id with a default value that is being passed to the view via an actionlink.

So, how can this input field [email protected](model => model.Id) -- get set with a default value.

Would the following work?? Where the number 5 is a parameter I pass into the text field to set default value.

@Html.EditorFor(c => c.PropertyName, new { text = "5"; })

C# Solutions


Solution 1 - C#

Here's what I've found:

@Html.TextBoxFor(c => c.Propertyname, new { @Value = "5" })

works with a capital V, not a lower case v (the assumption being value is a keyword used in setters typically) Lower vs upper value

@Html.EditorFor(c => c.Propertyname, new { @Value = "5" })

does not work

Your code ends up looking like this though

<input Value="5" id="Propertyname" name="Propertyname" type="text" value="" />

Value vs. value. Not sure I'd be too fond of that.

Why not just check in the controller action if the proprety has a value or not and if it doesn't just set it there in your view model to your defaulted value and let it bind so as to avoid all this monkey work in the view?

Solution 2 - C#

The clean way to do so is to pass a new instance of the created entity through the controller:

//GET
public ActionResult CreateNewMyEntity(string default_value)
{
    MyEntity newMyEntity = new MyEntity();
    newMyEntity._propertyValue = default_value;

    return View(newMyEntity);
}

If you want to pass the default value through ActionLink

@Html.ActionLink("Create New", "CreateNewMyEntity", new { default_value = "5" })

Solution 3 - C#

Its not right to set default value in View. The View should perform display work, not more. This action breaks ideology of MVC pattern. So the right place to set defaults - create method of controller class.

Solution 4 - C#

Better option is to do this in your view model like

public class MyVM
{
   int _propertyValue = 5;//set Default Value here
   public int PropertyName{
       get
       {
          return _propertyValue;   
       }
       set
       {
           _propertyValue = value;
       }
   }
}

Then in your view

@Html.EditorFor(c => c.PropertyName)

will work the way u want it (if no value default value will be there)

Solution 5 - C#

I just did this (Shadi's first answer) and it works a treat:

    public ActionResult Create()
    {
        Article article = new Article();
        article.Active = true;
        article.DatePublished = DateTime.Now;
        ViewData.Model = article;
        return View();
    } 

I could put the default values in my model like a propper MVC addict: (I'm using Entity Framework)

    public partial class Article
    {
        public Article()
        {
            Active = true;
            DatePublished = Datetime.Now;
        }
    }

    public ActionResult Create()
    {
        Article article = new Article();
        ViewData.Model = article;
        return View();
    } 

Can anyone see any downsides to this?

Solution 6 - C#

Shouldn't the @Html.EditorFor() make use of the Attributes you put in your model?

[DefaultValue(false)]
public bool TestAccount { get; set; }

Solution 7 - C#

Shove it in the ViewBag:

Controller:

ViewBag.ProductId = 1;

View:

@Html.TextBoxFor(c => c.Propertyname, new {@Value = ViewBag.ProductId})

Solution 8 - C#

This worked for me

In Controlle

 ViewBag.AAA = default_Value ;

In View

@Html.EditorFor(model => model.AAA, new { htmlAttributes = new { @Value = ViewBag.AAA } }

Solution 9 - C#

This worked for me:

In the controller

*ViewBag.DefaultValue= "Default Value";*

In the View

*@Html.EditorFor(model => model.PropertyName, new { htmlAttributes = new { @class = "form-control", @placeholder = "Enter a Value", @Value = ViewBag.DefaultValue} })*

Solution 10 - C#

For me I need to set current date and time as default value this solved my issue in View add this code :

<div class="form-group">
        @Html.LabelFor(model => model.order_date, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.order_date, new { htmlAttributes = new { @class = "form-control",@Value= DateTime.Now }  })
                @Html.ValidationMessageFor(model => model.order_date, "", new { @class = "text-danger" })
                
            </div>
        </div>

Solution 11 - C#

In the constructor method of your model class set the default value whatever you want. Then in your first action create an instance of the model and pass it to your view.

    public ActionResult VolunteersAdd()
    {
        VolunteerModel model = new VolunteerModel(); //to set the default values
        return View(model);
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult VolunteersAdd(VolunteerModel model)
    {


        return View(model);
    }

Solution 12 - C#

This is my working code:

@Html.EditorFor(model => model.PropertyName, new { htmlAttributes = new { @class = "form-control", @Value = "123" } })

my difference with other answers is using Value inside the htmlAttributes array

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNateView Question on Stackoverflow
Solution 1 - C#KhepriView Answer on Stackoverflow
Solution 2 - C#ShadiView Answer on Stackoverflow
Solution 3 - C#Anton SemenovView Answer on Stackoverflow
Solution 4 - C#Muhammad Adeel ZahidView Answer on Stackoverflow
Solution 5 - C#SmithyView Answer on Stackoverflow
Solution 6 - C#ZapnologicaView Answer on Stackoverflow
Solution 7 - C#user2216667View Answer on Stackoverflow
Solution 8 - C#Mohamed WardanView Answer on Stackoverflow
Solution 9 - C#JoeView Answer on Stackoverflow
Solution 10 - C#Ziad AdnanView Answer on Stackoverflow
Solution 11 - C#Ozan BAYRAMView Answer on Stackoverflow
Solution 12 - C#Hamed RezaeiView Answer on Stackoverflow