web-dev-qa-db-fra.com

Html.EditorFor Définir la valeur par défaut

Question recrue. J'ai un paramètre passé à une vue de création. Je dois définir un nom de champ avec une valeur par défaut. @ Html.EditorFor (model => model.Id) Je dois définir ce champ de saisie avec le nom Id avec une valeur par défaut transmise à la vue via un lien d'action.

Alors, comment ce champ de saisie - @ Html.EditorFor (model => model.Id) - peut-il être défini avec une valeur par défaut.

Cela fonctionnerait-il ??? Où le nombre 5 est un paramètre que je passe dans le champ de texte pour définir la valeur par défaut.

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

La façon propre de le faire est de passer une nouvelle instance de l'entité créée à travers le contrôleur:

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

    return View(newMyEntity);
}

Si vous souhaitez transmettre la valeur par défaut via ActionLink

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

Voici ce que j'ai trouvé:

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

fonctionne avec un V majuscule, pas un minuscule v (l'hypothèse étant la valeur, c'est généralement un mot clé utilisé dans les setters) valeur inférieure ou supérieure

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

ne marche pas

Votre code finit par ressembler à ceci

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

Valeur vs valeur. Pas sûr que j'aimerai trop ça.

Pourquoi ne pas simplement vérifier dans l'action du contrôleur si la propriété a une valeur ou non et si elle ne la définit pas simplement dans votre modèle de vue à la valeur par défaut et laissez-la se lier afin d'éviter tout travail de singe dans la vue?

97
Khepri

Il n'est pas correct de définir la valeur par défaut dans View. La vue doit effectuer le travail d’affichage, pas plus. Cette action brise l'idéologie du modèle MVC. Donc, le bon endroit pour définir les valeurs par défaut - créer une méthode de classe de contrôleur.

16
Anton Semenov

Une meilleure option consiste à le faire dans votre modèle de vue, comme

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

Alors à votre avis

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

fonctionnera comme vous le souhaitez (si aucune valeur par défaut ne sera présente)

14

La @Html.EditorFor() ne devrait-elle pas utiliser les attributs que vous avez mis dans votre modèle?

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

Je viens de faire ceci (première réponse de Shadi) et cela fonctionne comme une gâterie:

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

Je pourrais mettre les valeurs par défaut dans mon modèle comme un dépendant de MVC: (j'utilise 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();
    } 

Quelqu'un peut-il voir des inconvénients à cela?

3
Smithy

Enfoncez-le dans le ViewBag:

Manette:

ViewBag.ProductId = 1;

Vue:

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

Cela a fonctionné pour moi

en contrôle

 ViewBag.AAA = default_Value ;

dans la vue

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

Dans la méthode constructeur de votre classe de modèle, définissez la valeur par défaut comme vous le souhaitez. Ensuite, dans votre première action, créez une instance du modèle et transmettez-la à votre vue.

    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);
    }
0
Ozan BAYRAM

Ceci est mon code de travail:

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

ma différence avec d'autres réponses est d'utiliser Value dans le tableau htmlAttributes.

0
Hamed R