web-dev-qa-db-fra.com

comment définir la valeur par défaut HTML.EditorFor ()

Comment puis-je définir une valeur par défaut dans mes boîtes de rédaction de sorte que si je n'écris rien dans la boîte, il n'envoie pas de valeur nulle. 

 <div class="editor-label">
        @Html.Label("Description")
        </div>                                           // somthing like
       <div>@Html.EditorFor(model => model.Description, " Default value ")
        @Html.ValidationMessageFor(model => model.Description)
    </div>

Ou si je change à:

 @Html.TextBoxFor(Model.somthing, "Default value")
8
Fadi Alkadi

Pour afficher une valeur par défaut dans un champ, vous devez lui affecter la propriété 'Valeur' ​​dans htmlAttributes comme dans cet exemple:

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

Assurez-vous que le V dans Valeur est en majuscule.

De cette façon, vous ne ferez qu’affecter une valeur par défaut au champ HTML et non au modèle.

L'affectation de valeurs par défaut dans le modèle vous oblige à créer d'abord l'objet de modèle, ce qui définira les valeurs par défaut pour les champs non nullables, tels que les dates-heures. La page affichera alors les valeurs gênantes du 1/1/1001 00:00:00 champs datetime que vous pourriez avoir dans le reste du modèle.

19
Gabriel Pravaz

Le moyen le plus simple consiste à initialiser les propriétés dans votre constructeur de modèle:

public class PersonModel {
    public PersonModel () {
        FirstName = "Default first name";
        Description = "Default description";
    }
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Description { get; set; }
}

Et lorsque vous voulez l'envoyer à la vue, par exemple dans PersonController.Create action-method:

public ActionResult Create() {
    var model = new PersonModel();
    return View(model);
}

[HttpPost]
public ActionResult Create(PersonModel model) {
    // do something on post-back 
}

C'est ça. N'oubliez pas que vous devez créer une nouvelle instance de votre modèle et la transmettre à la vue pour qu'elle utilise ses valeurs par défaut. En raison de la vue associée à cette méthode d'action, attend une instance PersonModel, mais lorsque vous utilisez la méthode create comme ceci:

public ActionResult Create() {
    return View();
}

la vue n'a rien (je veux dire null), donc vos valeurs par défaut n'existent pas en fait. 

Mais si vous voulez faire cela à des fins compliquées, par exemple En utilisant la valeur par défaut comme filigrane, ou comme @JTMon l'a dit, vous ne voulez pas que les utilisateurs finaux voient les valeurs par défaut, vous aurez d'autres solutions. S'il vous plaît laissez-moi savoir votre but.

11
javad amiry

À la place d'utiliser

 @Html.EditorFor(model => model.UserId) 

Utilisation

@Html.TextBoxFor(model => model.UserId, new { @Value = "Prabhat" })
1
Prabhat

Pourquoi ne pas définir votre modèle comme "Valeur par défaut" pour sa propriété somthing? dans ce cas, vous n'avez rien de spécial à faire. Si cela ne vous convient pas (par exemple, si vous ne voulez pas que l'utilisateur voie la "valeur par défaut" à l'écran), vous pouvez avoir un classeur de modèle personnalisé pour ce modèle qui hérite de DefaultModelBinder. Remplacez uniquement la méthode OnModelUpdated. quelque chose comme:

model.somthg = string.IsNullOrEmpty(model.somthing) ? "Default Value" : model.somthing

Notez également que EditorFor ignore les attributs HTML personnalisés que vous lui envoyez, pour autant que je sache.

0
JTMon