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"; })
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" })
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?
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.
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)
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; }
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?
Enfoncez-le dans le ViewBag
:
Manette:
ViewBag.ProductId = 1;
Vue:
@Html.TextBoxFor(c => c.Propertyname, new {@Value = ViewBag.ProductId})
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 } }
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);
}
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.