liste déroulante dans le formulaire d'édition mvc3
Cela peut-être très simple, mais je ne peux pas semblent faire le tri sur mon propre.
J'ai créé un simple db et entité modal qui ressemble à ce
Je suis en train de créer un Créer un formulaire qui me permet d'ajouter une nouvelle Commande. J'ai un total de 3 tables donc ce que j'essaie de faire est d'avoir le formulaire permettant à la personne d'entrer la date de Commande et dispose également d'une liste déroulante qui me permet de sélectionner un produit dans la table product
Je veux être en mesure de créer, Ajouter ou Modifier l'affichage qui me permettent d'insérer la date de Commande dans le OrderTable et également d'insérer le n ° de commande et sélectionné ProductID en OrderProduct.
Quelles mesures dois-je faire ici.
J'ai créé un OrderController et coché "Ajouter des Actions" et que l'ajout d'une Vue de Créer ce qui ressemble à ceci
@model Test.OrderProduct
@{
ViewBag.Title = "Create2";
}
<h2>Create2</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>OrderProduct</legend>
<div class="editor-label">
@Html.LabelFor(model => model.OrderID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.OrderID)
@Html.ValidationMessageFor(model => model.OrderID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ProductID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ProductID)
@Html.ValidationMessageFor(model => model.ProductID)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
Cela crée une vue qui contient une zone de texte pour les deux n ° de commande et ProductID cependant aucune date n'.
Mon contrôleur CreatePost n'a pas été changé
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
var data = collection;
//TODO: Add insert logic here
// db.Orders.AddObject(collection);
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Mes questions sont,
1.Comment puis-je échanger ProductID zone de texte à une liste déroulante qui est rempli de Produit
2.Comment puis-je obtenir les données à partir de FormCollection collection? Je pensais juste à un foreach cependant je ne sais pas comment pour obtenir le fortement typé nom
Toute l'aide pour un débutant serait très utile.
Merci!
source d'informationauteur Diver Dan
Vous devez vous connecter pour publier un commentaire.
Première chose, ne pas se lier à la Ordre entité. Ne jamais se lier à une EF objet, essayez toujours et utiliser un ViewModel. Rend la vie plus simple pour la Vue, et c'est le but ici.
Donc, avoir un ViewModel comme ceci:
C'est dès maintenant.
Retour à votre point de Vue dans votre
[HttpGet]
action de contrôleur:Alors de rendre la liste des Produits: de base (HTML exclus)
La seule chose que je ne sais pas comment faire est de lier le champ date /heure. Je devine que vous auriez besoin d'une méthode d'extension (HTML Helper) qui rend un Sélecteur de Date ou quelque chose. De ce point de Vue (création d'un nouvel ordre), la juste valeur par défaut pour
DateTime.Now
.Maintenant, sur le
[HttpPost]
action de contrôleur:Maintenant, je pense aussi que votre modèle EF a besoin de travail.
Pour moi (en anglais), un Produit peut avoir plusieurs commandes, et une Commande peut avoir de nombreux Produits.
Donc, il devrait être l'un des plusieurs-à-plusieurs. Actuellement c'est un 1-1 avec un redondante de la table de jointure. Avez-vous générer à partir d'une base? Si oui, votre DB éventuellement besoin de travail.
Vous devriez avoir une navigation propriété appelée Produits sur le Ordre entité, qui référence une collection de Produitrendue possible par un silence de se joindre à la table de jointure dans le plusieurs-à-plusieurs.
Cela signifie également que vous n'avez plus d'un DropDownList, mais un MultiSelectDropDownList.
Grâce Craig. Vos quelques jours (au moment de la publication) de la MVC avoir résolu mes quelques jours d'essayer d'obtenir la valeur sélectionnée de retour de DropDownListFor.
Je n'ai eu aucun problème en vue de Créer dans le obtenir la valeur sélectionnée de la DDLF, mais la vue d'Édition a été un tout autre sujet - rien, j'ai essayé, serait d'obtenir la valeur sélectionnée de retour dans le Post. J'ai remarqué que la valeur sélectionnée est tapi dans l'AttemptedValue de la ModelState, et le Dr Google m'a renvoyé ici.
J'ai eu c'est à mon avis
où ContentKeys est un SelectList rempli à partir de la base de données via un ViewModel, et ContentKeyName est actuellement sélectionné nom.
La chose est bizarre, j'ai une autre DDL sur le point de vue peuplé d'une manière identique. Celui-ci fonctionne. Pourquoi, je ne sais pas. C'est la deuxième DDL sur le formulaire, mais je ne vois pas que faire une différence.
J'ai lu quelque part qu'il pourrait avoir été que j'ai été en utilisant Guid comme l'Id, mais qui ne semble pas faire une différence - j'ai changé pour Int32, mais ne pense pas que je devais - je pense que c'est les énumérations qui sont en désaccord avec DDLF. Nullable nous a semblé ne pas faire de différence.
Maintenant que j'ai ajouté le formulaire de collecte à mon Poste ActionResult, et d'obtenir la valeur sélectionnée à l'aide de
-vue
-dans le contrôleur (Post)
tout est bon, et je peux faire des choses plus passionnantes. Pourquoi est-ce que les choses les plus simples peuvent vous tenir si longtemps?
J'ai été aux prises avec ce cours des derniers jours. Je vais partager mes connaissances limitées dans l'espoir qu'il aidera quelqu'un d'autre.
Noter que j'utilise un singleton avec une liste préremplie pour garder mon exemple d'application de petite taille (c'est à dire pas d'EF ou DB interaction).
Pour montrer la ProductList vous aurez besoin d'avoir un ViewBag ou ViewData élément qui contient le ProductList.
Vous pouvez configurer cela dans le Contrôleur avec quelque chose comme
Ensuite mettre à jour votre point de Vue à quelque chose comme:
Pour le Poste/Créer/mettre à Jour une étape, vous devez regarder dans la FormCollection pour obtenir vos résultats. En lisant d'autres posts, il sonne comme il y avait un bug dans ici, mais c'est corrigé maintenant afin de vous assurer d'avoir la dernière. Pour mon exemple, j'ai un DropDownList pour le Produit donc je viens d'obtenir l'Id sélectionnées et puis aller à la recherche de ce Produit dans ma liste.
J'ai travaillé sur MVC3 depuis quelques jours, donc, tous les conseils sur l'amélioration de la ci-dessus serait appréciée.