En utilisant l'exemple de catalogue Auteurs/Livres, disons que je veux éditer les informations pour les livres d'un auteur spécifique.ASP.NET MVC newbie: obtenir/transmettre des données sous forme de liste déroulante pour plusieurs objets dans une édition Voir
Lorsque quelqu'un accède à domain.com/Books/Edit/2, je veux afficher une vue d'édition pour tous les livres où Author_ID = 2. Parmi les différentes informations de livre, il y a la catégorie de livre (fiction, non-fiction, manuel, peu importe) Ces catégories sont dans leur propre table et sont référencées par un Category_ID.
Quelle est la meilleure façon de configurer le formulaire d'édition?
Actuellement mon contrôleur j'ai quelque chose comme ceci:
public ActionResult Edit(int id)
{
IQueryable<Book> books = bookRepository.FindBooksForAuthor(id);
return View(books);
}
Et à mon avis partielle:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IQueryable<Authors.Models.Book>>" %>
<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %>
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Fields</legend>
<%var i = 0;
foreach (var book in Model)
{%>
<p>
<label for="Category_ID">Category_ID:</label>
<%= Html.TextBox("Category_ID", book.Category_ID)%>
<%= Html.ValidationMessage("Category_ID", "*")%>
</p>
<p>
<label for="Description">Description:</label>
<%= Html.TextBox("Description", book.Description)%>
<%= Html.ValidationMessage("Description", "*")%>
</p>
<%i++;
} %>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
est mon Inherits
correctement réglé en haut de la vue depuis que je suis de passage un objet IQueryable
? Plus important encore, comment puis-je obtenir le champ Category_ID pour être un DropDown avec la catégorie correcte sélectionnée? Puis-je simplement envoyer les données pour la liste déroulante à la vue et comprendre l'élément sélectionné au niveau de la vue?
ViewData["categories"] = new SelectList(_db.BookCategories.ToList().OrderBy(b => b.Category_Title), "Category_ID", "Category_Title");
Ce lien est un _bit_ obsolète; Par exemple, vous n'avez pas besoin d'index caché. Celui-ci est meilleur: http://marcomagdy.com/2009/09/03/asp-net-mvc-model-binding-form-inputs-to-action-parameters/ – queen3
Bon à savoir. Merci pour les précisions supplémentaires. – LukLed
Merci! Comme je l'ai mentionné, tout cela est nouveau pour moi. Je n'étais pas au courant du concept "ViewModel". Vous m'avez mis sur le bon chemin, j'ai dû google un peu et trouvé ceci, qui a tout exposé pour moi: http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc- tip-50-ndash-create-view-models.aspx Merci. – johnnycakes